动态添加HTML元素后创建jQuery事件

Kan*_*eda 1 html javascript forms jquery dynamically-generated

我有一个小脚本,当通过jQuery点击链接时创建新的HTML表单元素:

使用Javascript

var counterx = 2;
var counter = 2;

$(document).ready(function(){
    $("#addMoreRcpt").click(function(){
        if (counterx>10){
            alert("Only 10 reciepients are allowed");
            return false;
        }

        var newTextBoxTr = $(document.createElement('tr')).attr("id", 'RcptEml_' + counter);
        newTextBoxTr.append("<td><input type="button" id="txtRcptID_'+ counter + '"></td><td><input type="button" value="Search" id="SearchItem_'+ counter + '">
        </td>");

        newTextBoxTr.appendTo("#RcptGroup");
        counter++;
        counterx++;
    });
});
Run Code Online (Sandbox Code Playgroud)

HTML

<table border=1>
<div id="RcptGroup">
<tr>
    <th>1</th>
    <th>2</th>
</tr>
<div id="1">
<tr>
    <td><input type="text"></td>
    <td><input type="button" value="Search" id="SearchItem_1"></td>
</tr>
</div>
</div>
</table>
<br /><a id="addMoreRcpt" href="#" >Add row</a>
Run Code Online (Sandbox Code Playgroud)

现在,对于每个新创建的HTML表单,我需要创建一个新的jQuery事件,以便"搜索按钮"正常运行.这是搜索按钮的jQuery:

$("#searchItem_1").on('click', function() {
    $("#bg").fadeIn(400, function() {
            $("#modal").fadeIn(400);
        });
    });
    $("#modal img").on('click', function() {
        var text = $(this).siblings('.descr').text();
        $("#modal").fadeOut(400, function() {
                $("#bg").fadeOut(400, function() {
                    $("#txtRcptID_1").val(text);    
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

你看,上面的脚本引用了search_Item_1按钮和id为txtRcptID_ID的文本框.我需要完成的是每次单击"添加行"按钮时创建上面的脚本.

但它还需要具有正确的seatchItem_#和txtRcpt_#,它对应于创建新元素时的计数器编号.

例如:当我点击3目前添加行,计数器,那么脚本添加了新的元素与ID ="txtRcptID_3",并创建一个新的jQuery事件开始像这样$("#searchItem_3")上("咔哒" ,function(){

我尝试过并试过但没有成功.有人可以帮忙吗?

编辑**

我添加了以下代码并且非常接近,但是将模态窗口中的值添加到文本字段中仍然存在问题.我添加了一个警报功能来查看计数器的值,但是当点击搜索按钮时它会神秘地增加1:

newTextBoxRow.appendTo("#RcptGroup");
newTextBoxRow1.appendTo("#RcptGroup");
alert("ID number:"+counter);

$("#searchItem_"+counter).on('click', function(ev){
    $("#bg").fadeIn(400, function() {
        $("#modal").fadeIn(400);
    });
    alert("ID number:"+counter);
});

$("#modal img").on('click', function(ev) {
    var text = $(this).siblings('.descr').text();
    $("#modal").fadeOut(400, function() {
        $("#bg").fadeOut(400, function() {
             $("#txtRcptID_"+counter).val(text);    
         });
    });
});

counter++;
counterx++; 
Run Code Online (Sandbox Code Playgroud)

编辑2**

这是另一种尝试.我将搜索文本字段的ID更改为"txt_searchItem _'+ counter +'".并添加了此代码.它起作用,但仍然是一个问题.单击图像时,它会更新所有文本字段,而不仅仅是触发模态窗口的文本字段.

$(document).on('click', '.searchItemBtn', function(ev){
    var getID = $(this).attr("id");
    alert("ID number:"+getID);
        $("#bg").fadeIn(400, function() {
               $("#modal").fadeIn(400);
        });
         $(document).on('click', '#modal img', function(ev
            var text = $(this).siblings('.descr').text();
            $("#modal").fadeOut(400, function() {
                $("#bg").fadeOut(400, function() {
                    $("#txt_"+getID).val(text);    
                });
            });
        });
 }); 
Run Code Online (Sandbox Code Playgroud)

dav*_*ids 7

如果你想使on方法将处理程序附加到动态创建的元素,你应该像这样使用它:

$(parent_selector).on('click', child_selector, function(ev){
    // do stuff on click
});
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,我会在你创建的按钮上添加一个类,除了id:

newTextBoxTr.append('<td><input type="button" id="txtRcptID_'+ counter + '"></td><td><input type="button" value="Search" class="button_class" id="SearchItem_'+ counter + '">');
Run Code Online (Sandbox Code Playgroud)

并将附加这样的处理程序:

$(document).on('click', '.button_class', function(ev){
    // do stuff
});
Run Code Online (Sandbox Code Playgroud)