2
var i = 1;

$('select').on("change", i, function () {
    alert(i);
});

这没有做任何事情,我不确定为什么......

var i = 1;

$('select').change(function (i) {
    alert(i);
});

这是返回 [object Object]

无论如何,我希望能够将 int 传递给 change 方法,并且看不到我做错了什么。

4

4 回答 4

4

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);
});
于 2012-10-12T17:15:39.800 回答
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);
});
于 2012-10-12T17:11:57.513 回答
1

这是返回 [object Object]

$('select').change(function (i) {
    alert(i);
});

这不是将变量传递i给您的事件处理程序,而是使用具有name的第一个参数定义您的处理程序。触发事件时,将调用处理程序并将当前事件对象作为第一个参数传递,即引用该事件对象[docs] ii

您只能在调用函数时将参数传递给您,而不是在定义它们时。


这没有做任何事情,我不确定为什么......

$('select').on("change", i, function () {
   alert(i);
});

您传递给的第二个参数.on应该是一个包含选择器的字符串,它允许事件委托,或者包含的对象您要在事件处理程序中提供的数据。但是,此数据不会直接传递给事件处理程序,它可以通过事件对象的.data属性访问(见下文)。


话虽如此,您有两种可能性:

  1. 使用您的处理程序作为闭包,就像Omar 在他的 answer 中显示的那样。但请注意,无论何时i更改并执行事件处理程序,它的当前值都是i.

  2. 如果您想“传递” 的快照i,即它在定义事件处理程序时所具有的值,则可以如前所述传递一个数据对象.on,您可以通过处理程序中的事件对象访问该数据对象:

    $('select').on("change", {value: i}, function(event) {
        alert(event.data.value);
    });
    

    有关详细信息,请参阅event.data [文档]


我强烈建议阅读.on [docs]文档。它包含大量关于它和 jQuery 中的事件处理如何工作的信息。您似乎还没有完全理解函数的工作原理,在这种情况下,您应该查看 MDN JavaScript 指南中关于函数的部分。

于 2012-10-12T17:21:09.877 回答
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);
});
于 2012-10-12T17:35:33.953 回答