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

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

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 Ответ

2 голосов
/ 25 мая 2011

+ 1 Нэш

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

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

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

Теперь в JavaScript, если переменная данных имеет значение 0 (число), проверка if возвращает false. Поэтому, когда вы в первый раз запустите его, он не будет выполнять makeArray ().

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

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