我有这个正在侦听要更改的切换开关并调用一些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);
});
}
但是我的返工代码无效。
答案 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