var i = 1;
$('select').on("change", i, function () {
alert(i);
});
这没有做任何事情,我不确定为什么......
var i = 1;
$('select').change(function (i) {
alert(i);
});
这是返回 [object Object]
无论如何,我希望能够将 int 传递给 change 方法,并且看不到我做错了什么。
var i = 1;
$('select').on("change", i, function () {
alert(i);
});
这没有做任何事情,我不确定为什么......
var i = 1;
$('select').change(function (i) {
alert(i);
});
这是返回 [object Object]
无论如何,我希望能够将 int 传递给 change 方法,并且看不到我做错了什么。
The parameter in the function in the event is not one you pass, it's the event object, and it's passed by jQuery when the event is ran.
You can pass a value to .on
, and its value will appear in event.data
.
Example:
var i = 1;
$('select').on("change", i, function (e) {
alert(e.data); // e.data will be the variable passed to .on
});
Or since you are declaring i
outside the function, you can just use it inside.
var i = 1;
$('select').on("change", function (e) {
alert(i);
});
下面的代码应该可以工作,因为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);
});
这是返回 [object Object]
$('select').change(function (i) { alert(i); });
这不是将变量传递i
给您的事件处理程序,而是使用具有name的第一个参数定义您的处理程序。触发事件时,将调用处理程序并将当前事件对象作为第一个参数传递,即引用该事件对象[docs]。 i
i
您只能在调用函数时将参数传递给您,而不是在定义它们时。
这没有做任何事情,我不确定为什么......
$('select').on("change", i, function () { alert(i); });
您传递给的第二个参数.on
应该是一个包含选择器的字符串,它允许事件委托,或者包含的对象您要在事件处理程序中提供的数据。但是,此数据不会直接传递给事件处理程序,它可以通过事件对象的.data
属性访问(见下文)。
话虽如此,您有两种可能性:
使用您的处理程序作为闭包,就像Omar 在他的 answer 中显示的那样。但请注意,无论何时i
更改并执行事件处理程序,它的当前值都是i
.
如果您想“传递” 的快照i
,即它在定义事件处理程序时所具有的值,则可以如前所述传递一个数据对象.on
,您可以通过处理程序中的事件对象访问该数据对象:
$('select').on("change", {value: i}, function(event) {
alert(event.data.value);
});
有关详细信息,请参阅event.data
[文档]。
我强烈建议阅读.on
[docs]文档。它包含大量关于它和 jQuery 中的事件处理如何工作的信息。您似乎还没有完全理解函数的工作原理,在这种情况下,您应该查看 MDN JavaScript 指南中关于函数的部分。
这可能会有所帮助:
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);
});