2014-10-28 55 views
2

我有一个文本输入字段,它自己的类:.my_ids。我试图用jQuery写一个脚本,这样每次输入改变时,它都会调用一个特定的函数。这是很容易做到,如果我不尝试将变量传递给函数:将变量传递给函数使用.on()

$(document).on('change','.my_ids', testfunc); 
function testfunc(){ 
    alert("good"); 
} 

函数发送我每次输入变化的警报;工作得很好。

然而,如果我尝试一个变量传递给报警功能,像这样:

$(document).on('change','.my_ids', testfunc("hereismyvariable")); 
function testfunc(myvariable){ 
    alert(myvariable); 
} 

发送当文档加载,然后没有当输入的变化提醒警报。我可能会错过什么?

+0

事件处理程序作为函数的引用附加,但括号用于调用该函数。 – Danijel 2014-10-28 22:12:20

回答

1

你这样做

$(document).on('change','.my_ids', function() { 
    testfunc("hereismyvariable"); 
}); 

或者你可以做到这一点

$(document).on('change','.my_ids', testfunc("hereismyvariable")); 

function testfunc(myvariable){ 
    return function() { 
    alert(myvariable); 
    } 
} 
+0

非常感谢!工作得很好。 – neanderslob 2014-10-29 00:24:59

2

这里你传递一个函数: $(document).on('change','.my_ids', testfunc);
这里你传递一个函数的返回值: $(document).on('change','.my_ids', testfunc("hereismyvariable"));
因为testfunc("hereismyvariable") = undefined(不返回值),您添加一个未定义函数的事件处理程序。

1

()运算符调用函数,所以函数的返回值被设置为处理程序,这似乎不是你想要的。其他答案提出了几种解决方案另一种选择是使用data参数:

$(document).on('change', '.my_ids', "hereismyvariable", testfunc); 

function testfunc(event) { 
    console.log(event.data); // "hereismyvariable" 
} 

data参数可以是任何东西。 dataevent对象的属性指的是传递的值。