Javascript for循环中的jquery绑定单击事件

Javascript for循环中的jquery绑定单击事件,javascript,jquery,html,events,bind,Javascript,Jquery,Html,Events,Bind,我试图在for循环中绑定click事件,但任何移除按钮都只移除最后一个列表项。你知道为什么会这样吗 for ( var key in editedPredef.predefinition) { var listItem = $("<li></li>").addClass("ui-widget-content"); listItem.text("some text"); var removeListItem = $("<span c

我试图在for循环中绑定click事件,但任何移除按钮都只移除最后一个列表项。你知道为什么会这样吗

for ( var key in editedPredef.predefinition) {
      var listItem = $("<li></li>").addClass("ui-widget-content");
      listItem.text("some text");
      var removeListItem = $("<span class=\"ui-icon ui-icon-closethick\"></span>");
      removeListItem.click(function() {
        listItem.remove();
      });
      listItem.append(removeListItem);
      containerElement.append(listItem);
    }
改变

removeListItem.click(function() {
    listItem.remove();
  });

旁注:这将为每个元素绑定一个事件处理程序。您可以使用Rajaprabhu在他的报告中提到的事件委托。但是,委派的事件处理程序将比直接绑定的事件处理程序慢。因此,问题在于您的应用程序中可能有多少这样的元素。如果要进行委托,最好将事件处理程序绑定到直接的父元素,而不是动态添加,这样响应速度会更快。例如,如果事件处理程序不是动态添加的,也不会从页面中删除,则可以将其绑定到父级

$('ul').on('click','.ui-icon.ui-icon-closethick',function(){
 $(this).parent('li').remove();
});
改变

removeListItem.click(function() {
    listItem.remove();
  });

旁注:这将为每个元素绑定一个事件处理程序。您可以使用Rajaprabhu在他的报告中提到的事件委托。但是,委派的事件处理程序将比直接绑定的事件处理程序慢。因此,问题在于您的应用程序中可能有多少这样的元素。如果要进行委托,最好将事件处理程序绑定到直接的父元素,而不是动态添加,这样响应速度会更快。例如,如果事件处理程序不是动态添加的,也不会从页面中删除,则可以将其绑定到父级

$('ul').on('click','.ui-icon.ui-icon-closethick',function(){
 $(this).parent('li').remove();
});

不要写在for循环中,只要利用


请注意,将此代码放在for循环之外。

不要将其写在for循环内,只要利用



请注意,将此代码放在for循环的外部。

我没有看到for循环内部使用的键。@C-link这没关系。我用它来设置列表项的文本。我没有看到循环中使用的键…@C-link这没关系。我用它来设置列表项的文本。@AmitJoki是的,我的PM和TL走出了办公室..:PM和TL?他们是谁?项目经理和团队负责人@阿米特约基:你太年轻了,不认识这个兄弟@是的,是的。。maybe@AmitJoki是的,我的PM和TL去了办公室外面PM和TL?他们是谁?项目经理和团队负责人@阿米特约基:你太年轻了,不认识这个兄弟@是的,是的。。梅比哈什投了反对票。不是我,虽然为了有人留下反馈,似乎是因为这样可以创建X个匿名函数。每个按钮一个。事件委派只意味着创建和调用单个function@RGraham对,我没想到,这是我看到代码时想到的第一件事…:我还是要提到授权。严厉的否决票。不是我,虽然为了有人留下反馈,似乎是因为这样可以创建X个匿名函数。每个按钮一个。事件委派只意味着创建和调用单个function@RGraham对,我没有想到,这是我看到代码时想到的第一件事…:我还是要提到委派。