我正在尝试将可选参数传递给jQuery中的javascript函数。在下面的例子中,接收参数的函数是'foo'。它通过参数的第二个jQuery工作正常。 jQuery的第一部分没有我传入的任何参数,但jQuery似乎仍然传递一个对象。
最终我希望'bar'成为可选参数,如果我没有传入任何内容,则设置为0.
//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做的事情?
答案 0 :(得分:4)
这里jQuery将事件对象传递给click
回调,这是设计的。如果你想让jQuery在没有参数的情况下调用回调,那么你需要将它包装在lambda中并明确地不传递参数
$('#id').change(function() { foo(); });
答案 1 :(得分:1)
两个选项:要么总是传递事件对象,要么永远不要:
始终:
//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
}
从不:
//jQuery Bit #1
$('#id').change(function() { foo(); } ); // <=== Note change here
//jQuery Bit #2
$('#id2').click(function(e){
var bar = $(e.target).text();
foo(bar);
});
function foo(bar) {
if (!bar) bar = 0; // <== no "var" on this line
}
请注意,您不能在var
的任何位置使用foo
来声明bar
。 bar
是一个参数,但您可以分配给它。
FWIW:另请注意,在您的示例中,bar
将是字符串(目标元素的文本)或数字(0
)。这种不一致可能会让您感到困惑,您可能会考虑使用parseInt
或parseFloat
来获取文本(假设它应该始终是一个数字):
var bar = parseInt($(e.target).text(), 10); // 10 = I'm assuming decimal
var bar = parseFloat($(e.target).text()); // parseFloat always assumes decimal
如果没有文字,或者它不是可解析的数字,则bar
将为NaN
,而foo
中的代码将为0
(因为{{1}是} !NaN
)。
答案 2 :(得分:1)
我相信如果您将函数重写为
,您的代码将会起作用编辑:代码已修复。
//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
}