这个jquery $ .each()代码出了什么问题?

时间:2012-03-15 07:05:40

标签: jquery html javascript-events

的Javascript

 $.each(['#clk','#clk1'], function()
    {
        $(this).click(function () {
            alert("click")
        });
    });

HTML

   <a href="#" id="clk">click me</a>
   <a href="#" id="clk1">click me</a>

单击链接时没有警告框。 更新:
我有超过1个身份证。我只展示了一个简化问题的方法。

4 个答案:

答案 0 :(得分:2)

您可以进一步将其简化为:

$("#clk").click (function () {
    alert("click");
});

答案 1 :(得分:2)

您必须使用String.toString()来获取String对象的值。

目前尚不清楚为什么需要一系列选择器,但这里有两个解决方案;

使用String.toString();

的解决方案
// Array of strings to be used as element selectors.
var selectors = ['#element1', '#element2'];

// Using $.each()
$.each(selectors, function() {
    // String.toString() returns the value of the String object.
    var $this = $(this.toString());

    $this.click(function () {
        console.log('Clicked element(1) =', this.id || this); // DEBUG
    });
});

使用String.join();

的替代解决方案
// Using String.join()
$(selectors.join(',')).click(function(event) {
    event.preventDefault(); // This is to not follow the link

    // Notice that "this" now referes to the current/clicked element 
    // and not any string value from the "selectors" array.
    console.log('Clicked element(2) =', this.id || this); // DEBUG
});

请参阅我的 demo

如果你真的不需要选择器数组,我会建议像这样简单的multiple selector;

$('#element1, #element2').click(function() { ... });

答案 2 :(得分:1)

首先,为什么在迭代id时使用foreach构造?当你使用和id时,应该只有一个具有给定id的元素。所以,这应该没问题:

$("#clk").click(function() {
    alert("click");
});

其次,每个迭代一个数组,你的数组为#clk。只是字符串,没有别的。您的所有函数获取的是两个参数:0' (the index of the element) and the string #clk`(该索引处的值)。字符串IS未解析为JS对象。

答案 3 :(得分:0)

IMO,解决问题陈述的最简洁方法是:

$("a[id^='clk']").click(function () {
        alert("click");
});

^=选择器将选择id以'clk'开头的所有锚点,并将click函数绑定到所有这些锚点。您可以阅读有关此选择器的更多信息here