#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.