如何从外部函数引用事件对象? - jQuery

时间:2010-03-10 21:07:54

标签: jquery

我在jQuery函数中引用事件对象时遇到了麻烦:

// Execute a function when an image with the arrow class is clicked
$('.arrow').bind('click',update_support);

// Function tries to refer to the calling image using $(this)
function update_support() {
  alert( $(this).src );
}

// Result: an alert of 'undefined'

这段代码确实有效,但是它会明确地将“this”对象传递给函数,我觉得必须有更好的方法:

$('.arrow').bind('click',update_support(this));

function update_support(obj) {
  alert( obj.src );
}

// Result: an alert with the src of the clicked image

编辑以使我的问题更清晰: 为什么我必须明确地给函数提供任何参数?来自http://api.jquery.com/category/events/event-object的jQuery文档:“事件对象保证传递给事件处理程序。”我的问题是:如果我没有明确地传递它,它在哪里? ;)?

3 个答案:

答案 0 :(得分:2)

$('.arrow').bind('click',function(event){ update_support(event);} );

未经测试,但应将对该事件的引用传递给update_support

修改:您还需要修改update_support,显然:

function update_support(evt) {
  alert( evt.target.src );
}

答案 1 :(得分:1)

而不是:

alert( $(this).src );

尝试:

alert( this.src );

$(this)是一个jQuery对象。 this是一个DOM元素。

答案 2 :(得分:1)

作为inkedmnJ-P的答案的替代

// Execute a function when an image with the arrow class is clicked
$('.arrow').bind('click',update_support);

// Function tries to refer to the calling image using $(this)
function update_support(e) {
  alert( e.target.src );
}
在这种情况下,

eevent对象(跨浏览器标准化)

如果未在事件处理程序签名中显式定义事件对象参数的参数,则可以使用arguments

引用事件对象
// Execute a function when an image with the arrow class is clicked
$('.arrow').bind('click',update_support);

// Function tries to refer to the calling image using $(this)
function update_support() {
  alert( arguments[0].target.src );
}

但是我诚实地认为,通过显式定义事件对象参数的参数,可以使代码更容易阅读。