函数初始化侦听器

时间:2013-12-23 14:42:03

标签: jquery

我有这个正在侦听要更改的切换开关并调用一些AJAX:

   $('#notificationStatusBtn').on('switch-change', function(e, data) {      
        if(data.value == true){         
            $.get("myURL");
        }else{
            $.get("myURL");
        }
    })

这很好但我不太喜欢参数样式中的函数。所以我试着把它折射成:

    $(document).ready(initListeners());

    //Intialize button listeners    
    function initListeners(){
        $('#notificationStatusBtn').on('switch-change', setNotificationStatus(e, data));
    }

    function setNotificationStatus(e, data){
        if(data.value == true){         
            $.get("muURL",function(data,status){
                    alert("Data: " + data + "\nStatus: " + status);
            });
        }else{
            $.get("muURL",function(data,status){
                    alert("Data: " + data + "\nStatus: " + status);
            });
        }

但是我的返工代码无效。

2 个答案:

答案 0 :(得分:2)

$('#notificationStatusBtn').on('switch-change', setNotificationStatus(e, data));

你在这里调用函数,而不是将它作为参数传递。注意括号。

您可以尝试改为:

$('#notificationStatusBtn').on('switch-change', setNotificationStatus);

你也遇到同样的问题:

$(document).ready(initListeners());

请记住,只要在函数名称后面有括号,您就调用函数。当将函数作为参数传递时,您可以简单地将函数视为任何其他变量。

这是一个示例控制台会话,以使其更清晰:

> function test() { return 4; };
undefined
> test
function test() { return 4; }
> test()
4

答案 1 :(得分:2)

您的回调在setNotificationStatus中不正确。回调是对函数的引用,因此不需要变量e和数据。

尝试删除它们,以便:

$('#notificationStatusBtn').on('switch-change', setNotificationStatus);

您在文档就绪处理程序中也犯了同样的错误:

$(document).ready(initListeners());

变为:

$(document).ready(initListeners);

在调试时不要害怕使用警报语句,它偶尔会用作快速和脏的检查。如果要保留调试信息,可以移动到console.log。

HTH