Что не так в этом коде jquery $ .each ()? - PullRequest
0 голосов
/ 15 марта 2012

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>

Нет предупреждения при нажатии на ссылку. UPDATE:
У меня есть более 1 идентификатор. Я показал только один, чтобы упростить проблему.

Ответы [ 4 ]

2 голосов
/ 15 марта 2012

Вам нужно будет использовать 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
});

1021 *

См. Мое демо .

Если вам не нужен массив селекторов, я бы порекомендовал простой множественный селектор , например так;

$('#element1, #element2').click(function() { ... });
2 голосов
/ 15 марта 2012

Вы могли бы еще упростить это до:

$("#clk").click (function () {
    alert("click");
});
1 голос
/ 15 марта 2012

Во-первых, почему вы используете конструкцию foreach при итерации по идентификатору?Когда вы используете и идентификатор, предполагается, что это ТОЛЬКО ОДИН элемент с данным идентификатором.Итак, все должно быть в порядке:

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

Во-вторых, каждый перебирает массив, ваш массив равен #clkПросто строка, больше ничего.Все, что получает ваша функция - это два параметра: 0' (the index of the element) and the string # clk` (значение по этому индексу).Строка НЕ ​​разрешена в объект JS.

0 голосов
/ 15 марта 2012

IMO, самый чистый способ решения вашей проблемы:

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

Селектор ^= выберет все якоря, чей идентификатор начинается с 'clk', и свяжет функцию click со всеми этими,Вы можете прочитать больше об этом селекторе здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...