Дополнительный параметр в .trigger() не достигает функции прослушивателя: что происходит?

#javascript #jquery #javascript-events

#javascript #jquery #jquery-события

Вопрос:

Я возлюсь с этим кодом:

 var items;

function getMessage(index) {
    if (index == items.size()) return;
    var item = items.eq(index);
    $.get('/message/'   index,
        function(response) {
            item.html(response);
            $("ul").trigger('updated', index);
        }
    );
}

$(document).ready(function(){
    items = $(".message");

    $("ul").bind('updated',
        function(event, i) {
            getMessage(i   1);
        }
    );
    getMessage(0);

});
  

И этот html:

 <ul>
    <li class="message"></li>
    <li class="message"></li>
    <li class="message"></li>
</ul>
  

Согласно документации к функции jQuery .trigger() ,

«Один [дополнительный] параметр может быть передан без использования массива».

Но в приведенном выше коде функция, прослушивающая событие «update», никогда не получает параметр «index» (переданный в строке 9), если я не заключу его в скобки, подобные этому:

 $("ul").trigger('updated', [index]);
  

Я даже не уверен, связано ли это конкретно с jQuery. Не могли бы вы помочь мне понять, что происходит?

Комментарии:

1. у меня это работает — jsfiddle.net/gSFd4 Какой браузер вы используете?

2. …но этого не произойдет, если мы начнем с 0, как я сделал: jsfiddle.net/gSFd4/2 🙂

Ответ №1:

1 Nash

Не похоже, что jQuery не обрабатывает случай одного параметра, переданного без массива. Проверено как из API, так и из последнего источника.

Единственное исключение, которое, как я предполагаю, заключается в том, что значение принимается переменной с именем data. И это выглядит следующим образом:

 data ? jQuery.makeArray( data ) : [];
  

Теперь в JavaScript, если переменная data имеет значение 0 (число), проверка if возвращает false . Итак, при первом запуске он не выполнит makeArray().

Опять же, это всего лишь предположение вслух. Пожалуйста, не заблуждайтесь, если это не так.

Комментарии:

1. Вы правы! Теперь я понимаю, что проблема возникает только при передаче 0, любое другое число действительно будет работать. Я собираюсь сообщить об этом как об ошибке пользователям jQuery. Спасибо!

2. Кстати, это было исправлено в этом коммите github.com/jquery/jquery/commit /…

3. @nash Спасибо, что указали на это, похоже, что очень скоро на картах появится версия 1.6.2.