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供参考:
答案 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));
});
});