Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
Javascript 有人能解释为什么这是通过一个对象吗_Javascript_Jquery - Fatal编程技术网

Javascript 有人能解释为什么这是通过一个对象吗

Javascript 有人能解释为什么这是通过一个对象吗,javascript,jquery,Javascript,Jquery,我有如下几点 $(document).ready(function() { $('#doReport').click(doReport); }); function doReport(type) { if (type === undefined) { type = 'blah'; } alert (type); } 如果我从控制台运行doReport(),或者在javascript中独立运行,其中没有任何内容,它将返回'blah'(如预期的那样

我有如下几点

$(document).ready(function() {
    $('#doReport').click(doReport);
});

function doReport(type) {
    if (type === undefined) {
        type = 'blah';
    }
    alert (type);
}
如果我从控制台运行
doReport()
,或者在javascript中独立运行,其中没有任何内容,它将返回'blah'(如预期的那样),显然,如果我调用
doReport('wibble')如您所料,它返回'wibble'

但是,如果我通过单击ID为doReport的元素来运行它(使用我在.ready中设置的绑定),它将返回[object]


我不明白为什么会出现这种情况。

jQuery库向事件处理程序传递一个“事件”对象。它将永远在那里。它是本机浏览器对象的“包装”或“固定”版本,使其更易于处理

是此类对象的文档

另外值得注意的是,jQuery将调用处理程序函数,因此
this
引用调用处理程序的DOM元素


另外,正如@Ericson578在一篇好评论中指出的,jQuery允许设置额外的参数,这意味着可以向处理程序传递额外的参数。如果您有一个单独的事件处理程序函数绑定到不同的元素,但您希望使用一些不同的标志或基于元素细节的任何东西来限定其行为,那么这可能会很有用。

事件处理程序接收一个参数。

这是因为事件处理程序是用对象触发的(特别是
事件
对象)作为第一个参数传递

这就是为什么您会看到这样的语法

$('#doReport').click(function(e) {
如果要在没有任何参数的情况下调用函数,则需要创建包装函数:

$(document).ready(function() {
    $('#doReport').click(function() {
        doReport();
    });
});

当jQuery调用作为参数传递的函数进行单击时,它将事件对象作为参数传递,因此您将以[object object]的形式收到警报。 选中此项:

。单击(处理程序(eventObject)) handler(eventObject)每次触发事件时要执行的函数


您的
doReport()
函数正在获取一个事件对象。

如果需要向函数传递参数,请使用另一个函数将其包装起来

$(document).ready(function() {    
    $('#doReport').click(function(event){
        doReport('blah');
    });
});

我要添加的唯一一件事是,您还可以将数据与函数绑定在一起:是的,这是一个很好的观点-不仅可以像那样绑定数据,还可以由显式触发事件的代码提供数据。