jquery:动态地将li项附加到ul然后添加click,但是点击运行每个li

时间:2013-03-12 12:24:40

标签: javascript jquery html

所以我可能正在接近这个错误,因为我正在学习,但我似乎无法弄清楚我在这里做错了什么(可能是简单的错误,但我遇到了麻烦)。因此,我试图在标记内有一个按钮单击,允许从对话框中进行选择,对话框中的提交按钮包括调用自定义函数,该函数执行某些逻辑,然后将字符串附加到类似内容:

buildListElementItem += "<li>something</li>";
$("#my-list").append(buildListElementItem);

然后绑定点击,因为我需要每个列表项代表选择面板类型的东西

$("#my-list li").bind('click', function () {
   //processing stuff
});

一切正常但是如果我在这个列表中添加多个项目(一个接一个)并且你单击一个项目,它会滚动每个项目,这使我感到困惑,因为没有每个项目,我认为这应该只添加这是一个项目......

所以这个函数还有更多的东西/但是我认为我的方法在这里是错误的吗?

我已经尝试将选择器修改为类似于我在li的字符串中添加的类,我尝试使用.on,.live,.delegate或任何我能找到的而不是绑定点击。

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

编辑:只需添加更多内容以便澄清

Dialog允许用户从选择/下拉选择项目,按钮点击(jquery ui)具有调用以下想法的功能,将项目添加到列表元素,该列表元素用作选择面板。因此,他们可以填充面板上所需的项目,然后单击每个项目以填充并将数据与该项目相关联。

function addNewListItem(passedType)
{
    var buildListElementItem = "<li>" + passedType + "</li>";
    $("#my-list").append(buildListElementItem);
    $("#my-list li").bind('click', function () {
       otherStuff();
});

如果我这样做,我猜这会导致每个元素一遍又一遍地被绑定?不确定,但这有效的例外,当我点击该面板上的单个li项目时,它处理面板上的所有li项目(otherStuff函数)。所以我想从示例中我开始理解这个问题或为什么这不起作用,但是我如何处理我想要做的事情呢?永远赞赏你们! }

1 个答案:

答案 0 :(得分:2)

当你说“没有每个”时,你省略$("#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);

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