有人可以解释为什么这是传递一个对象

时间:2011-02-16 16:04:54

标签: javascript jquery

我有类似以下内容......

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

function doReport(type) {
    if (type === undefined) {
        type = 'blah';
    }
    alert (type);
}

如果我从控制台运行doReport()或在javascript中独立运行{* 1}},它将返回'blah'(如预期的那样),显然如果我调用doReport('wibble');它会返回'wibble'正如你所料。

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

我不明白为什么会这样。

6 个答案:

答案 0 :(得分:7)

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

Here是此类对象的文档。

同样值得注意的是,jQuery将调用您的处理程序函数,以便this引用要为其调用处理程序的DOM元素。

另外,正如@ Ericson578在评论中指出的那样,jQuery允许设置其他参数,这意味着您的处理程序可能会传递其他参数。如果你有一个单独的事件处理函数绑定到不同的元素,那么这可能是有用的,但是你想根据元素的细节用一些不同的标志或其他任何东西限定它的行为。

答案 1 :(得分:2)

事件处理程序会收到event object作为参数。

答案 2 :(得分:1)

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

这就是你看到

这样语法的原因
$('#doReport').click(function(e) {

如果你想在没有任何参数的情况下调用函数,你需要创建一个包装函数来执行此操作:

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

答案 3 :(得分:0)

当jQuery调用作为参数传递的函数进行单击时,它将事件对象作为参数传递,因此您将获取警报为[object Object]。 检查一下:

  

http://api.jquery.com/click/

答案 4 :(得分:0)

来自JQuery - .click()

  

.click(handler(eventObject))   handler(eventObject)每次触发事件时执行的函数。

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

答案 5 :(得分:0)

如果你需要将一个参数传递给你的函数,

用另一个函数包装它。

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