Jquery按钮单击()函数不起作用

Fre*_*ded 26 html javascript jquery

我正在尝试创建动态表单,用户可以根据需要添加动态文本字段.这是我的jquery代码..

$(document).ready(function() {
    $("#add").click(function() {
        var intId = $("#buildyourform div").length +1;
        var fieldWrapper = $("<div class=\"fieldwrapper\" name=\"field" + intId + "\" id=\"field" + intId + "\"/>");
        var fName = $("<input type=\"text\" name=\"name\" class=\"fieldname\" id=\"tb"+ intId +"_1\"/>");
        var lname = $("<input type=\"text\" name=\"email\" class=\"lastname\" id=\"tb"+ intId +"_2\"/>");
        var removeButton = $("<input type=\"button\" class=\"remove\" value=\"-\" />");

        var addButton = $("<input type=\"button\" class=\"add\" id=\"add\" value=\"+\" />")
        removeButton.click(function() {
            $(this).parent().remove();
        });
        fieldWrapper.append(fName);
        fieldWrapper.append(lname);
        fieldWrapper.append(removeButton);
        fieldWrapper.append(addButton);
        $(this).remove();
        $("#buildyourform").append(fieldWrapper);

    });

});
Run Code Online (Sandbox Code Playgroud)

和Html代码是......

<fieldset id="buildyourform">
    <legend>Build your own form!</legend>
    <div class="fieldwrapper" name="field1" id="field1" />
       <input type="text" name="name" class="fieldname" id="tb1_1" />
       <input type="text" name="email" class="lastname" id="tb1_2" />
       <input type="button" value="+" class="add" id="add" />
    </div>
</fieldset> 
<input type="submit" value="send" id="asdasd" name="submit" />
Run Code Online (Sandbox Code Playgroud)

检查我的JSFiddle也.

我错的是当用户第一次点击"+"按钮然后点击功能工作时它会在我的字段集中添加两个文本字段.但之后,当我点击"+"按钮时,它不会触发点击功能.可能是id冲突.请帮忙.

j08*_*691 50

您需要使用.on()此处的事件委派语法.更改:

$("#add").click(function() {
Run Code Online (Sandbox Code Playgroud)

$("#buildyourform").on('click', '#add', function () {
Run Code Online (Sandbox Code Playgroud)

jsFiddle例子


Ror*_*san 16

您需要使用委托事件处理程序,因为#add动态追加的元素不会绑定到它们的click事件.试试这个:

$("#buildyourform").on('click', "#add", function() {
    // your code...
});
Run Code Online (Sandbox Code Playgroud)

此外,您可以通过混合行引号使HTML字符串更易于阅读:

var fieldWrapper = $('<div class="fieldwrapper" name="field' + intId + '" id="field' + intId + '"/>');
Run Code Online (Sandbox Code Playgroud)

甚至将属性作为对象提供:

var fieldWrapper = $('<div></div>', { 
    'class': 'fieldwrapper',
    'name': 'field' + intId,
    'id': 'field' + intId
});
Run Code Online (Sandbox Code Playgroud)