2011-10-27 31 views
0

我有幾個文本框是根據我從另一個源獲得的結果動態生成的。我想添加一些事件處理程序到這些文本框來捕捉任何按鍵,並確保輸入的任何內容都是數字。將事件處理程序附加到多個文本框(具有類似的圖案ID)?

我生成基於​​JSON響應內的陣列的長度,這些文本框,像這樣:

for(i=0;i<data.routesout.length;i++) 
{   
      content += '<label for="route' + i + '">' + data.routesout[i].name + '(%)</label>'; 
      content += '<input type="text" name="route' + i + '" id="route' + i + '" value="' + data.routesout[i].percent>';    
} 

如何可以附加一個單一事件處理程序的所有這些可能的輸入?

回答

3

您已經標記了與jQuery的問題,所以我想知道你爲什麼不使用庫來建立你的內容:

var content = []; 
for (var i = 0; i < data.routesout.length; ++i) { 
    content.push($('<label/>', { 'for': 'route' + i, text: data.routesout[i].name })); 
    content.push($('<input/>', { change: yourEventHandler, type: 'text', name: 'route' + i, id: 'route' + i, value: date.routesout[i].percent, change: yourEventHandler })); 
} 

通過這樣做,您可以在構建它們時按元素綁定處理程序元素。 (我以「更改」爲例,但可以用相同的方式綁定處理程序以用於任何想要的事件。)

最後,您可以追加所有創建的元素,但是您可以追加它們,也可以追加它們因爲你去建造一個數組而不是建立數組。

+0

我對jQuery很新穎(如果我誠實地說,一般來說web編程,更多的是桌面.NET開發人員),所以我不知道你可以做到這一點。我真的很喜歡它,很整潔。感謝那! – sxthomson

3

可以使用starts with選擇

$('input[id^="route"]').keyup(function(){... 

需要注意的是,如果你在飛行中創建這些,你可能需要使用live附上事件:

$('input[id^="route"]').live('keyup', function(){... 
1

這是怎麼回事?

for(i=0;i<data.routesout.length;i++){   
    content += '<label for="route' + i + '">' + data.routesout[i].name + '(%)</label>'; 
    content += '<input onkeypress="doSomething(this)" type="text" name="route' + i + '" id="route' + i + '" value="' + data.routesout[i].percent + '>';    
} 

function doSomething(element){ 
    /* this function will be called when user presess key inside a textbox */ 
} 
相關問題