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