2012-07-18 115 views
2

自動完成適用於靜態字段,但它不適用於動態字段。jQuery-UI自動完成不適用於動態字段

我試過.live()方法,因爲我無法讓它正常工作。

這裏是我的HTML:

<table> 
    <tr class="selectmatprimas"> 
     <td> 
      <input type="text" class="selectmatprima" /> 
      <input type="text" name="matprimas[]" /> 
     </td> 
    </tr> 
    <tr class="clone" style="display:none;"> 
     <td> 
      <input type="text" class="selectmatprima" /> 
      <input type="text" name="matprimas[]" /> 
     </td> 
    </tr> 
</table> 
<input type="button" value="addmore" id="addmore" /> 

這裏是我的JS:

var src = [ 
    { 
     "label": "Mat\u00e9ria Prima 1", 
     "value": "1" 
    }, 
    { 
     "label": "Mat\u00e9ria Prima 2", 
     "value": "2" 
    } 
]; 

$("input.selectmatprima").autocomplete({ 
    source: src, 
    select: function (event, ui) { 
     event.preventDefault(); 
     this.value = ui.item.label; 
     $(this).next().val(ui.item.value); 
    }, 
    focus: function (event, ui) { 
     event.preventDefault(); 
     this.value = ui.item.label; 
     $(this).next().val(ui.item.value); 
    } 
}); 

$("input#addmore").click(function(){ 
    var a = $('tr.clone').html(); 
    var b = $('tr.selectmatprimas:last'); 
    b.after("<tr class='selectmatprimas'>"+a+"</tr>"); 
}); 

Online DEMO

正如你可以看到,當我點擊addmore按鈕,自動完成沒有按在新的領域工作...

+3

我發現做這樣的事情是將用最好的方式'.on' (因爲'.live'被棄用)來處理動態加載輸入的'click'或'focus'事件,然後在事件觸發時設置自動完成 – MrOBrian 2012-07-18 17:06:49

回答

3

我只有皮毛與您的代碼,但這裏的工作version

的關鍵是jQuery的on()功能,您可以閱讀有關here

+0

謝謝,它的工作原理!但是,更好地關注而不是關鍵? – silentw 2012-07-18 18:07:42

+0

只是這樣做,因爲你評論。再次檢查鏈接。它將與兩者兼容。 – 2012-07-18 18:10:10

+0

非常感謝,這是訣竅! – silentw 2012-07-18 18:11:08