1

我正在尝试将点击事件添加到我通过附加它们创建的一堆 div 元素中,但我遇到了一些麻烦。

我有一堆 id 为 a0 ---> an 的 div 元素。我试图在创建 div 后创建一个 for 循环以分配它们的点击事件。问题是当点击事件发生时我这样做的方式我没有任何方法可以跟踪哪个 div 触发了事件。下面的代码可能会使这一点更清楚。所以我遇到的问题是 #a + i 总是返回最后一个 div,我希望它返回被点击的 div 编号。

$(document).ready(function () {
            traverse(oo);
            for (i = 0; i <= groupNum; i += 1) {
                $("#a" + i).click(function () {
                    console.log("#a" + i + "clicked");
                });
            }
        });

我考虑过返回一个闭门器,但这似乎会让它变得更加复杂。有人对如何做到最好有任何建议吗?

提前致谢。

4

4 回答 4

6

我不确定您要做什么,但如果您只想将点击事件分配给一堆元素,请使用正确的选择器(注意使用$(this)来获取点击的元素):

$("div").click(function(){
   var clickedDiv = $(this);
   var id = clickedDiv.attr("id");
});

如果您不想要所有div元素,那么您可以向它们添加一个类并使用不同的选择器:

$(".MyDivClass").click(function(){...

或没有类,在id(以下获取属性以“a”开头的所有div元素)上的“开始于”:id

$("div[id^='a']").click(function(){...

如果您正在使用其他 javascript 动态添加 div,并且希望它们自动具有点击事件,请使用该on函数...

$(document).on("click", ".MyDivClass", function(){...
于 2013-03-15T17:37:27.143 回答
2

如您所见,该变量i将包含上次迭代时设置的值。改变

console.log("#a" + i + "clicked");

经过

console.log(this.id + " clicked");

在事件处理程序中,this是事件的目标 DOM 元素。

于 2013-03-15T17:36:50.120 回答
0

你可以这样做:

$('[id^="a"]').click(function () {
  console.log(this.id+" clicked");
});
于 2013-03-15T17:40:31.070 回答
0

You may assign a click event to a class instead of to specific ID's and use conditional statements within the click function to do different things base on ID.

    $(documnet).ready(function(){
        $('.clickclass').click(function(){
                  /* conditional code here */
        });
    });
于 2013-03-15T17:51:40.380 回答