如何调用 click( ) 属性

How to call a click( ) attribute?

本文关键字:click 属性 何调用 调用      更新时间:2023-09-26
function dosomething(){
    alert($(this).attr('id')+' called with '+$(this).innerHTML);
}
$('#myElement').click(dosomething);

这是 HTML:

<div id="myElement">click me</div>

单击该元素即可。 但以下来自其他位置的调用不会:

dosomething($('#myElement'));

在Javascript中使用对象对我来说仍然令人沮丧。 谁能解释为什么#2不起作用,以及处理这两种情况的优雅方法? 这里有一个JSFIDDLE供参考:

http://jsfiddle.net/sqb6bkwr/

你的函数dosomething()不接受任何参数。因此,它将不起作用。您可以选择使用 $('#myElemenet').trigger('click');

或者选择让函数接受设置元素的参数:
function dosomething(el) {
    el = (el) ? el : $(this);
    alert(el.attr('id')+' called with '+el.innerHTML);
}
// My suggestion won't work.
// Use dosomething.call(el) instead.
dosomething($('#myElement'));

这不起作用,因为函数 dosomething() 不希望将元素作为第一个参数,并且将其作为参数传递不会自动将其设置为 this

调用该方法的方式取决于预期行为。如果你想要的只是在该元素上调用该dosomething函数,那么你可以这样做:

dosomething.call($('#myElement')[0]);

但是,如果您的目标是模拟对该元素的单击,这将触发可能位于该元素上的任何其他单击事件侦听器,那么您应该这样做:

$('#myElement').click();
// or, as @Karl-AndréGagnon pointed out, $('#myElement').trigger('click');

差异可能看起来很小,但知道你真正想要发生的事情可能会让你免于未来的一些头痛。

这是因为没有设置函数的this值。将参数传递给函数,但期望this值是参数。

相反,您应该像这样称呼它: dosomething.call($("#myelement")[0]);

这将调用具有#myelement this值的函数。[0]之所以存在,是因为您想要本机 DOM 元素,而不是类似 jQuery 数组的对象。这就是将this包装在函数中$(this)的原因。

试试这个:

var domething;
$(document).ready(function(){
dosomething = function(elem){
    alert(elem.attr('id')+' called with '+elem.attr('title'));
}
$('#myElement').click(function(){
  dosomething($(this));
});
});

工作小提琴:http://jsfiddle.net/robertrozas/3z0pg9b1/1/