如何调用click()属性?

时间:2014-09-24 19:44:14

标签: javascript jquery

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/

4 个答案:

答案 0 :(得分:3)

您的函数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.

答案 1 :(得分:2)

dosomething($('#myElement'));

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

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

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

但是如果你的目标是模拟对该元素的点击,这会触发可能在该元素上的任何其他点击事件监听器,那么你应该这样做:

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

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

答案 2 :(得分:1)

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

你应该这样称呼: dosomething.call($("#myelement")[0]);

这将使用this的{​​{1}}值调用该函数。 #myelement就在那里因为您需要本机DOM元素,而不是类似jQuery数组的对象。这就是你将[0]包裹在this函数中的原因。

答案 3 :(得分:0)

试试这个:

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/