日期:2014-05-16  浏览次数:20382 次

请教关于jquery.bind的handler的参数问题
在一个jquery扩展插件里自定义事件 
 element.bind("change.tabs",function(tabName) {
        element.find("li").removeClass("active");
        element.find(">[data-tab='" + tabName + "']").addClass("active");
    });
然后通过
element.trigger("change.tabs",firstName);
调用。不成功。

修改如下后:handler增加一个e参数
 element.bind("change.tabs",function(e, tabName) {
        element.find("li").removeClass("active");
        element.find(">[data-tab='" + tabName + "']").addClass("active");
    });
然后通过
element.trigger("change.tabs",firstName);
调用。成功。


为什么handller的参数必须有第一个参数e,而且在handler方法体内部还没有用到。
但是如果没有e这个参数则不能被trigger成功执行。

查了资料也没有找到原因,请知道的指导一下,谢谢。

------解决方案--------------------
说明该事件触发时,侦听器传入两个参数,e,tabName,
你第一种写法,获得的是第一个参数,是事件对象,不是tabName,所以后面函数内代码会出错,自己写个alert测试一下不就明白了

 element.bind("change.tabs",function(tabName) {
alert(tabName);//object,值其实为事件对象e
        element.find("li").removeClass("active");
        element.find(">[data-tab='" + tabName + "']").addClass("active");
});