Javascript jquery:动态地将li项附加到ul,然后添加click,但是click会在每个li中运行

Javascript jquery:动态地将li项附加到ul,然后添加click,但是click会在每个li中运行,javascript,jquery,html,Javascript,Jquery,Html,所以在我学习的过程中,我可能会走错路,但我似乎不知道我做错了什么,可能是一个简单的错误,但我遇到了麻烦。因此,我尝试在标记中添加一个按钮,单击该按钮可以从对话框中进行选择,对话框上的提交按钮包括对自定义函数的调用,该函数执行一些逻辑,然后将字符串附加到类似的内容: buildListElementItem += "<li>something</li>"; $("#my-list").append(buildListElementItem); 一切正常,但如果我一个接一个

所以在我学习的过程中,我可能会走错路,但我似乎不知道我做错了什么,可能是一个简单的错误,但我遇到了麻烦。因此,我尝试在标记中添加一个按钮,单击该按钮可以从对话框中进行选择,对话框上的提交按钮包括对自定义函数的调用,该函数执行一些逻辑,然后将字符串附加到类似的内容:

buildListElementItem += "<li>something</li>";
$("#my-list").append(buildListElementItem);
一切正常,但如果我一个接一个地将多个项目添加到此列表中,而您单击单个项目,它将滚动通过每个项目,这让我感到困惑,因为没有每个项目,我认为这应该只将其添加到单个项目中

所以这个函数还有很多,但我认为我的方法是错误的

我尝试过修改选择器,使其像我在li的字符串中添加的类一样,我尝试过使用.on、.live、.delegate或任何我可以找到的东西来代替绑定单击

也许这是尝试执行此操作的简单方法类型错误,但我非常感谢在这方面的任何帮助、建议等

编辑:只需添加更多说明

对话框允许用户从选择/下拉列表中选择项目,按钮单击jquery ui具有调用下面idea的函数,以将项目添加到列表元素中,该元素用作选择面板。所以他们可以填充面板上所需的项目,然后单击每个项目以填充数据并将其与该项目关联

function addNewListItem(passedType)
{
    var buildListElementItem = "<li>" + passedType + "</li>";
    $("#my-list").append(buildListElementItem);
    $("#my-list li").bind('click', function () {
       otherStuff();
});
如果我这样做,我猜这会导致每个元素被一次又一次地绑定?不确定,但这可以正常工作,但当我单击该面板上的单个li项时,它会处理面板otherStuff函数上的所有li项。所以我想,从这些例子中,我开始理解这个问题,或者为什么这不起作用,但是我将如何处理我当时试图做的事情呢?永远感激男人!
}

当您说没有each时,您忽略了$my list li是一个jQuery选择器,即它返回与表达式匹配的所有元素:在本例中,我的列表的子树中的所有li项。 因此,当您调用bind时,它将绑定到已经添加到元素中的每个li项

您要寻找的是以下内容:

buildListElementItem = $("<li>something</li>"); //constructs a jquery object you can bind to
buildListElementItem.bind('click', function () {
   //processing stuff
});
$("my-list").append(buildListElementItem);

这样,您可以在添加元素之前进行绑定。

我似乎无法复制此问题。我这儿有把小提琴。虽然我应该指出你的第一行$my list.append…**my list**缺少一个yeah,这是文章中的一个拼写错误…会更正的。感谢使用jquery版本的DjQuery 1.6.2正在使用,因为它依赖于库。是否在每个$my-list.AppendBuildListenItem之后绑定事件处理程序;我假设他的buildListelementItem是字符串类型,而不是jQuery对象,因此您无法对其调用.bind。但您可以指出,他以前可能已经将事件绑定到较旧的项目,然后进行双重绑定。在这种情况下,他可以调用.unbind方法。哦,是的,我没有看到他使用的是字符串,而不是jQuery对象。将使用jquery元素构造函数相应地编辑帖子。我一直在开发一个仍然使用jquery 1.6的系统,使用live绑定事件是不可能的。经过数小时的搜索并未能使用.live实现,我终于找到了您的解决方案,效果不错!我投你的票,先生!
buildListElementItem = $("<li>something</li>"); //constructs a jquery object you can bind to
buildListElementItem.bind('click', function () {
   //processing stuff
});
$("my-list").append(buildListElementItem);