var i = 1;
$('select').on("change", i, function () {
alert(i);
});
这没有做任何事情,我不确定为什么......
var i = 1;
$('select').change(function (i) {
alert(i);
});
这是返回[object Object]
无论如何,我希望能够将int传递给change方法,但却看不出我做错了什么。
答案 0 :(得分:4)
事件中函数中的参数不是您传递的参数,而是event object,并且在事件运行时由jQuery传递。
您可以将值传递给.on
,其值将显示在event.data
。
示例:
var i = 1;
$('select').on("change", i, function (e) {
alert(e.data); // e.data will be the variable passed to .on
});
或者,因为你在函数之外声明i
,你可以在里面使用它。
var i = 1;
$('select').on("change", function (e) {
alert(i);
});
答案 1 :(得分:2)
以下代码应该有效,因为i
是一个全局变量
var i = 1;
$('select').on("change", function() {
alert(i);
});
或者如果您想将i
作为数据传递给事件,那么这也可以起作用:
var i = 1;
$('select').on("change", {i: i}, function(e) {
alert(e.data.i);
});
答案 2 :(得分:1)
这是返回[object Object]
$('select').change(function (i) { alert(i); });
这不会将变量i
传递给您的事件处理程序,这是定义您的处理程序,第一个参数具有名称 i
。触发事件时,将调用处理程序并将当前事件对象作为第一个参数传递,即i
引用event object [docs]。
您只能在调用时将参数传递给您,而不是定义时。
这没有做任何事情,我不确定为什么......
$('select').on("change", i, function () { alert(i); });
传递给.on
的第二个参数应该是一个包含选择器的字符串,它允许事件委托,或者一个包含对象的对象,你想在事件处理程序中使用它。这些数据不会直接传递给事件处理程序,它可以通过事件对象的.data
属性访问(见下文)。
话虽如此,你有两个可能性:
使用您的处理程序作为闭包,例如Omar shows in his answer。但请注意,每当i
更改并执行事件处理程序时,它将具有当前值i
。
如果您想“传递”i
的快照,即您定义事件处理程序时的值,您可以如前所述将数据对象传递给{ {1}}您可以通过处理程序中的事件对象访问:
.on
有关详细信息,请参阅event.data
[docs]。
我强烈建议您阅读.on
[docs]文档。它包含很多关于jQuery如何工作和事件处理的信息。您似乎还不完全了解函数的工作原理,在这种情况下,您应该查看MDN JavaScript指南section about functions。
答案 3 :(得分:0)
这可能有所帮助:
1)当你做
时$('select').on('change',i,function(ev){...});
然后将值i分配给ev.data。 所以在你的处理程序中,你可以这样做:
$('select').on('change',i,function(ev){
alert(ev.data)
});
2)为了更好地理解为什么第二个不能按预期工作,因为在JS中,你可能想要了解JS中的作用域如何工作。
但总结是,您在警报中访问的变量i是事件处理程序范围中的局部变量。
function(i){ alert(i) },// here i is the event object .
只需将变量名称更改为x,它就可以正常工作。
var i = 1;
$('select').change(function (x) {
alert(i);
});