Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态创建的DOM操纵按钮未触发事件_Javascript_Jquery_Html - Fatal编程技术网

Javascript 动态创建的DOM操纵按钮未触发事件

Javascript 动态创建的DOM操纵按钮未触发事件,javascript,jquery,html,Javascript,Jquery,Html,我有一个添加和删除字段的函数,但是删除函数不知怎么地不起作用 HTML: 它没有通过那个条件。 当我单击Remove时,它根本不做任何事情,只是滚动到顶部。您正在将单击处理程序绑定到DOM中存在的元素。但是,正在动态添加您的#removefield元素。因此,事件处理程序没有附加到它 您可以使用.on()来使用事件委派并处理将来的元素。此外,您可能希望使用类名而不是和id属性id属性需要是唯一的,但是您可以将类名设置为您想要的任意多个元素 <a href="#" class="remove

我有一个添加和删除字段的函数,但是删除函数不知怎么地不起作用

HTML:

它没有通过那个条件。
当我单击Remove时,它根本不做任何事情,只是滚动到顶部。

您正在将
单击处理程序绑定到DOM中存在的元素。但是,正在动态添加您的
#removefield
元素。因此,事件处理程序没有附加到它

您可以使用
.on()
来使用事件委派并处理将来的元素。此外,您可能希望使用类名而不是和
id
属性<代码>id
属性需要是唯一的,但是您可以将类名设置为您想要的任意多个元素

<a href="#" class="removefield">Remove</a>

“Remove”
链接不起作用的原因是,您正在逐部分添加动态
元素,从而使其成为无效标记。你应该一次把它们加在一起。比如说,

$('#addField').on('click', function () {
    var part = '<div id="parts' + i + '"><span>Part</span> <input type="text" id="auto_part' + i + '" name="auto_part' + i + '" /><br/>' +
        '<span>Description</span> <input type="text" id="auto_description' + i + '" name="auto_description' + i + '" /> <br />' +
        '<input type="hidden" id="row_count' + i + '" name="row_count' + i + '" value="" />' +
        '<a href="#" class="removefield' + i + '">Remove</a></div>';
    scntDiv.after(part);
    i++;
    return false;
});
试试看

$('#removefield').live("click", function() {

另外,
ID
应该是唯一的,动态创建只是问题的一半。我投票支持重新打开
live()
在jQuery版本1.9中被删除,在1.7中被贬值。在()上使用
on
这是可行的,但是当我现在按remove时,它会删除所有的parts divs$(This).parents(“#parts”).remove()@SinanSamet,这意味着你的选择器一开始就错了。你能修复你的HTML布局吗?我不认为您在想要添加元素的地方添加了元素。在该示例中,它使用相同的名称id,只是删除了它的In而不是Inall@SinanSamet,我看不出该链接与您或我提出的问题有何关联said@SinanSamet,你需要
<a href="#" class="removefield">Remove</a>
$("#parts").on("click", ".removefield", function() { 
  /* ... */
});
$('#addField').on('click', function () {
    var part = '<div id="parts' + i + '"><span>Part</span> <input type="text" id="auto_part' + i + '" name="auto_part' + i + '" /><br/>' +
        '<span>Description</span> <input type="text" id="auto_description' + i + '" name="auto_description' + i + '" /> <br />' +
        '<input type="hidden" id="row_count' + i + '" name="row_count' + i + '" value="" />' +
        '<a href="#" class="removefield' + i + '">Remove</a></div>';
    scntDiv.after(part);
    i++;
    return false;
});
$(document).on("click", ".removefield", function() {
    if( i > 2 ) {
        $(this).parent('div').remove();
        i--;
    }
    return false;
});
$('#removefield').live("click", function() {