将可选参数从jQuery传递到javascript函数
我试图从jQuery向javascript函数传递一个可选参数。在下面的示例中,接收参数的函数是“foo”。它与传递参数的jQuery的第二位配合得很好。jQuery的第一位没有我传入的任何参数,但jQuery似乎仍然传递一个对象 最后,我希望“bar”是一个可选参数,如果我不传入任何内容,则将其设置为0将可选参数从jQuery传递到javascript函数,javascript,jquery,Javascript,Jquery,我试图从jQuery向javascript函数传递一个可选参数。在下面的示例中,接收参数的函数是“foo”。它与传递参数的jQuery的第二位配合得很好。jQuery的第一位没有我传入的任何参数,但jQuery似乎仍然传递一个对象 最后,我希望“bar”是一个可选参数,如果我不传入任何内容,则将其设置为0 //jQuery Bit #1 $('#id').change(foo); //jQuery Bit #2 $('#id2').click(fu
//jQuery Bit #1
$('#id').change(foo);
//jQuery Bit #2
$('#id2').click(function(e){
var bar = $(e.target).text();
foo(bar);
});
function foo(bar) {
if (!bar) var bar = 0;
//do stuff here
}
既然jQuery正在传入一个对象,我是否应该将“bar”作为对象传入,并将其作为对象的属性进行检查?或者,在这种情况下,我是否遗漏了jQuery所做的或应该做的事情?这里jQuery将事件对象传递到
click
回调中,这是出于设计。如果希望jQuery在不使用参数的情况下调用回调,则需要将其包装在lambda中,并且显式不传递参数
$('#id').change(function() { foo(); });
在这里,jQuery将事件对象传递到
click
回调中,这是通过设计实现的。如果希望jQuery在不使用参数的情况下调用回调,则需要将其包装在lambda中,并且显式不传递参数
$('#id').change(function() { foo(); });
两个选项:始终传递事件对象或从不传递: 始终:
//jQuery Bit #1
$('#id').change(foo);
//jQuery Bit #2
$('#id2').click(function(e){
var bar = $(e.target).text();
foo(e, bar); // <== Note change here
});
function foo(e, bar) {
if (!bar) bar = 0; // <== no "var" on this line
}
如果没有文本,或者它不是一个可解析的数字,
bar
将是NaN
,而foo
中的代码将使其成为0
(因为!NaN
是true
)。两个选项:始终传递事件对象,或者从不传递:
始终:
//jQuery Bit #1
$('#id').change(foo);
//jQuery Bit #2
$('#id2').click(function(e){
var bar = $(e.target).text();
foo(e, bar); // <== Note change here
});
function foo(e, bar) {
if (!bar) bar = 0; // <== no "var" on this line
}
如果没有文本,或者它不是一个可解析的数字,
bar
将是NaN
,而foo
中的代码将使其成为0
(因为!NaN
是真的
)。如果您将函数重写为
编辑:代码已修复
//jQuery Bit #1
$('#id').change(foo); // will be effectively invoked as "foo(event, undefined)"
//jQuery Bit #2
$('#id2').click(function(e){
var bar = $(e.target).text();
foo(null, bar);
});
function foo(unusedEvent, bar) {
bar = bar || 0;
//do stuff here
}
我相信,如果您将函数重写为 编辑:代码已修复
//jQuery Bit #1
$('#id').change(foo); // will be effectively invoked as "foo(event, undefined)"
//jQuery Bit #2
$('#id2').click(function(e){
var bar = $(e.target).text();
foo(null, bar);
});
function foo(unusedEvent, bar) {
bar = bar || 0;
//do stuff here
}
由于
bar()
不返回任何内容,所以示例很难确定您想要什么,或者问什么。。。单击处理程序中的var-bar
是一个字符串,因此对对象问题非常困惑bar()
不返回任何内容示例很难弄清楚您想要什么,或者询问什么。。。单击处理程序中的var-bar
是一个字符串,所以对对象issueNo非常困惑,它不会。有时他会将事件对象作为第一个参数,有时则不是。不,不会。有时他会将事件对象作为第一个参数,有时则不是。感谢提供更多信息!老实说,这是我没有想到的,尽管我不认为在这种特殊情况下会有任何不利影响。如果我后来扩展它,它可能会非常好!谢谢你的额外信息!老实说,这是我没有想到的,尽管我不认为在这种特殊情况下会有任何不利影响。如果我后来扩展它,它可能会非常好!