Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Jquery .parent().remove()问题_Jquery_Forms_Clone - Fatal编程技术网

Jquery .parent().remove()问题

Jquery .parent().remove()问题,jquery,forms,clone,Jquery,Forms,Clone,我有一个基于jQuery的表单,您可以在其中向应用程序添加额外的人员。我正在克隆第一个字段集,并将其添加到末端,最多增加3人。当您添加了一个额外的人,然后您可以选择删除该人 但是,我的“删除”按钮不起作用。之前,我在克隆中添加了额外的函数来更改字段集中其他元素的ID 我正在使用: $(".remove").click(function() { $(this).parent().remove(); 这本来是可行的,但现在不行了,我不知道为什么 我删除了第一个“删除此人”的停止行,只是为了

我有一个基于jQuery的表单,您可以在其中向应用程序添加额外的人员。我正在克隆第一个字段集,并将其添加到末端,最多增加3人。当您添加了一个额外的人,然后您可以选择删除该人

但是,我的“删除”按钮不起作用。之前,我在克隆中添加了额外的函数来更改字段集中其他元素的ID

我正在使用:

$(".remove").click(function() {
    $(this).parent().remove();
这本来是可行的,但现在不行了,我不知道为什么

我删除了第一个“删除此人”的停止行,只是为了表明第一个仍然有效,但其余的不行。(我最终会把第一个放在舞台外,等它修好了)

可能更容易看到,所以我把它挂了起来

因此,基本上,你知道为什么我的“删除此人”除了第一部分外,其他部分都不起作用吗?

试试:

$(document).on('click', '.remove', function() {
    $(this).parent().remove();
});

事件在页面加载时绑定,因此新添加的元素不会被绑定。

请确保关闭表达式:

$(".remove").click(function() {
    $(this).parent().remove();
});

这些元素最初并不存在,这意味着您需要使用
.live()
.delegate()

例如,更改:


使用
$(“.remove”)。单击(…)
而不是
$(“.remove”)。live(“单击”,…)

此“live”函数调用已被弃用,不再有效。您可以在此处找到有关如何使用替换“on()”方法重写函数的说明,以及有关弃用的更多信息:

要处理所有当前和新创建的图元,现在必须使用:

$(document).on("click", ".remove", function() {
    $(this).parent().remove();
});

jQuery在文档对象上运行,而不是在元素上运行,另外还有一个参数用于指定要监视哪些元素并将事件侦听器添加到其中。

您可以执行以下操作来删除父对象:

 $(document).on("click", ".remove", function() { 
      $(this).parent().remove(); 
 });
或者,您可以为删除所有父项执行此操作:

 $(document).on("click", ".remove", function() { 
      $(this).parents().remove();
 });

这很可能会起作用,如果是这样,原因是当您执行
$.click()
时,您将事件处理程序连接到与选择器匹配的所有当前现有元素,而
$.live()
将其连接到所有当前或未来匹配的元素。如果在代码太挂接事件处理程序运行后添加了新人员的块,则在处理程序挂接时,这些块不存在,因此在发生事件时,它们不包括在选择器中。@Tomas:实际上
。live()
不会挂接到与选择器匹配的任何元素。它为
窗口
文档
(我不记得是哪一个)提供一个处理程序,并使用文档范围的事件委托。出于这个原因,我更喜欢使用
.delegate()
,它也使用委派,但只在您定义的容器中使用。@patrick:你说得对。就性能而言,最好使用委托。虽然委托在内部也使用live(带有一个额外的参数)。是的,您是正确的。因为他们在做同样的事情,jQuery将所有功能都集成到一个方法中。我认为如果他们只指定一种公共授权方式会更好。太棒了!非常感谢你!真的很感激!我使用了
$(.remove”).live(“单击”,函数(){$(this.parent().remove();重置();});
成功了!再次感谢!好极了