Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将可选参数从jQuery传递到javascript函数_Javascript_Jquery - Fatal编程技术网

将可选参数从jQuery传递到javascript函数

将可选参数从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向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将事件对象传递到
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非常困惑,它不会。有时他会将事件对象作为第一个参数,有时则不是。不,不会。有时他会将事件对象作为第一个参数,有时则不是。感谢提供更多信息!老实说,这是我没有想到的,尽管我不认为在这种特殊情况下会有任何不利影响。如果我后来扩展它,它可能会非常好!谢谢你的额外信息!老实说,这是我没有想到的,尽管我不认为在这种特殊情况下会有任何不利影响。如果我后来扩展它,它可能会非常好!