Javascript 如何调用click()属性?

Javascript 如何调用click()属性?,javascript,jquery,Javascript,Jquery,以下是HTML: function dosomething(){ alert($(this).attr('id')+' called with '+$(this).innerHTML); } $('#myElement').click(dosomething); 在Javascript中使用对象仍然让我感到沮丧。有人能解释为什么#2不起作用,以及处理这两种情况的优雅方式吗?以下是一个JSFIDLE供参考: 您的函数dosomething()不接受任何参数。因此,它将不起作用。您可以选择

以下是HTML:

function dosomething(){
    alert($(this).attr('id')+' called with '+$(this).innerHTML);
}
$('#myElement').click(dosomething);
在Javascript中使用对象仍然让我感到沮丧。有人能解释为什么#2不起作用,以及处理这两种情况的优雅方式吗?以下是一个JSFIDLE供参考:


您的函数
dosomething()
不接受任何参数。因此,它将不起作用。您可以选择使用
$('#myElemenet')。触发器('click'),或选择让函数接受设置元素的参数:


函数
dosomething()
不接受任何参数。因此,它将不起作用。您可以选择使用
$('#myElemenet')。触发器('click'),或选择让函数接受设置元素的参数:


这是因为未设置函数的
This
值。将参数传递给函数,但希望
this
值为参数

你应该这样称呼它:
dosomething.call($(“#myelement”)[0])


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

这是因为未设置函数的
This
值。将参数传递给函数,但希望
this
值为参数

你应该这样称呼它:
dosomething.call($(“#myelement”)[0])

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

尝试以下方法:

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.
工作小提琴:试试这个:

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()
不希望将元素作为第一个参数引入,并且将其作为参数传递不会自动将其设置为
This

调用该方法的方式取决于您的预期行为。如果您只想调用该元素上的
dosomething
函数,则可以执行以下操作:

dosomething($('#myElement'));
但是,如果您的目标是模拟对该元素的单击,这将触发该元素上的任何其他单击事件侦听器,那么您应该执行以下操作:

dosomething.call($('#myElement')[0]);
这两者之间的差别似乎很小,但知道自己真正想要发生的事情可能会让你避免今后的一些头痛

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

调用该方法的方式取决于您的预期行为。如果您只想调用该元素上的
dosomething
函数,则可以执行以下操作:

dosomething($('#myElement'));
但是,如果您的目标是模拟对该元素的单击,这将触发该元素上的任何其他单击事件侦听器,那么您应该执行以下操作:

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

差别可能看起来很小,但知道你真正想要发生什么可能会让你避免今后的一些头痛
$('#myElement')。单击()@Travesty3不想成为一头驴,但我的比它好0.00000001ms:)@Karl AndréGagnon::-d可能重复
$(“#myElement”)。触发器('click')
$('#myElement')。单击()
@Travesty3不想成为一个混蛋,但我的要好0.00000001ms:)@Karl AndréGagnon::-d可能的重复将不起作用,因为当实际单击元素时,
el
将成为事件。因此
el.attr()
将抛出
未定义的不是函数
@Karl AndréGagnon I stand corrected:-)。在这种情况下,我将使用Zenorbi建议的
.call()
。这将不起作用,因为实际单击元素时,
el
将是事件。因此
el.attr()
将抛出
未定义的不是函数
@Karl AndréGagnon I stand corrected:-)。在这种情况下,我会按照Zenorbi的建议使用
.call()
$('#myElement').click();
// or, as @Karl-AndréGagnon pointed out, $('#myElement').trigger('click');