0

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

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

然后绑定单击,因为我需要这些列表项中的每一个来代表选择面板类型的事物

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

一切正常,但是如果我在此列表中添加多个项目(一个接一个)并且您单击一个项目,它会遍历每个项目,这让我感到困惑,因为没有每个项目,我认为这只应该将它添加到单品……

所以这个功能/等等还有很多,但我认为我在这里的方法是错误的?

我尝试将选择器修改为喜欢我在 li 的字符串中添加的类,我尝试使用 .on、.live、.delegate 或任何我能找到的东西来代替绑定单击。

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

编辑:只是添加更多澄清

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

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

如果我执行上述操作,我猜这会导致每个元素一遍又一遍地绑定?不确定,但是除了当我单击该面板上的单个 li 项目时,它会处理面板上的所有 li 项目(otherStuff 函数)。所以我想从这些例子中我开始理解这个问题或者为什么这不起作用,但是我将如何处理我想要做的事情呢?一直很感激伙计们!}

4

1 回答 1

2

当你说“没有 each”时,你忽略$("#my-list li")了 jQuery 选择器,即它返回与表达式匹配的所有元素:在这种情况下,#my-list 的子树中的所有 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);

This way, you bind before the element has been added.

于 2013-03-12T12:36:02.430 回答