.trigger中的额外参数未达到侦听器函数:发生了什么事?

问题描述

| 我正在修改代码
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()函数的文档,\“可以在不使用数组的情况下传递单个[extra]参数。\” 但是在上面的代码中,侦听\“ update \”事件的函数永远不会获取参数\“ index \”(在第9行中传递),除非我将其括在方括号中,如下所示:
$(\"ul\").trigger(\'updated\',[index]);
我什至不确定这是否与jQuery有关。您能帮我了解发生了什么吗?     

解决方法

+1纳什 如果jQuery无法处理没有数组传递的一个参数的情况,看起来就不一样了。已通过API和最新来源进行了验证。 我猜唯一的例外是该值是由一个名为data的变量接收的。它是这样的:
data ? jQuery.makeArray( data ) : [];
现在在JavaScript中,如果数据变量的值为0(数字),则if校验返回false。因此,当您第一次运行它时,它将不会执行makeArray()。 再次,这只是一个思考的猜测。如果不是这种情况,请不要被误导。