2014-04-17 72 views
0

我正在尝试将VKI(请参阅http://www.greywyvern.com/code/javascript/keyboard)附加到通过Javascript动态添加到DOM中的元素。适用于香草javascript而不是jquery

从本质上讲,这是一个只有一行开始的表格,还有“添加行”和“删除行”。它会变得棘手,因为每一行都有一个输入需要附加VKI。

下面是我的其他更大的代码来处理添加和删除行的片段。

$('#add-passenger-row').click(function(){ 
    get_lastID(); 
    $('#passenger-information tbody').append(newRow); 


    // this doesn't work --- throws "Uncaught TypeError: undefined is not a function" 
    var myInput = $(newRow).find('#myInput'); 
    VKI_attach(myInput); 

    // this works 
    var myInput = document.getElementById('myInput'); 
    VKI_attach(myInput); 

}); 

我的问题是......我该如何做这项工作?即当用户点击“添加行”时,将VKI附加到该行中的每个输入上动态添加

如果问题不够清楚,我可以创建JSBin。

+0

'newRow'的内容是什么? – MackieeE

+2

也,它似乎是你添加多个元素相同的ID ... – Johan

+0

@barmar谢谢...它使用.get(0) –

回答

1

尝试:

var myInput = $(newRow).find('#myInput').get(0); 
VKI_attach(myInput); 

.get()从一个jQuery对象中检索的DOM元素。 VKI不是jQuery小部件,因此它不适用于jQuery对象,它需要原始DOM元素。

0

尝试

var myInput = $('#myInput'); 

好运

0

jQuery的变种不工作的原因是因为$(newRow).find('#myInput')是不一样的document.getElementById('myInput')。见this SO question。显然VKI_attach只接受一个DOM元素而不是一个jQuery包装元素。

1

我认为d-bro82和ZiNNED都是正确的,但尝试var myInput = $('#myInput')[0]; 因为VNK_attach只接受一个dom元素,所以[0]应该删除jQuery封装器