2011-09-07 53 views
0

事件处理程序是绑定到元素的,因此您可以使用不同的选择器触发事件​​?请看下面的例子来看看我想知道:使用返回相同HTML对象的不同选择器调用相同的处理程序

例子:
HTML

<ul id="itemsList"> 
<li class="items" id="item1">element1</li> 
<li class="items" id="item2">element2</li> 
<li class="items" id="item3">element3</li> 
</ul> 

的Javascript中单击事件处理程序的定义:

$('.items').click(function(){ 
    //do something 
}); 

要invoque此处理程序,我认为使用不同的选择器有几种可能,因此$('#item1').click();$(#itemsList li).eq(1).click();会调用相同的事件处理程序。对?
如果是的话,我肯定是做错了什么,因为它不能正常工作...

回答

0

我有几件事情需要指出:

  • 别忘了"的表达方式$(#itemsList li).eq(1).click();
  • .eq(1)实际上选择第二li,因为eq index从0开始

正确的语法:

// define handler 
$('.items').click(function(){ 
    alert($(this).text() + " clicked"); 
}); 

// call handler 
$('#item1').click() ; 

$("#itemsList li").eq(0).click(); 

jsFiddle demo

+0

我想要的是使用不同的选择器调用相同的处理程序,而不是为每个选择器定义处理程序。 – Kaplan

+0

已更新我的回答 –

+0

当然,处理程序需要在被调用的行之前定义,对吗? – Kaplan

0

调用没有参数或.trigger('click')的.click()应该调用你的结果选择。由于pinouchon指出要小心你的选择器语法,在适当的地方使用引号并记住.eq()是零索引的,这意味着.eq(1)将选择第二个li元素。

最后,调用事件处理程序,我认为你想要的是:

$('#itemsList li').eq(0).click(); 

或者的确,

$('#item1').click(); 
+0

确定吗?我用这种方式多次调用点击处理程序,似乎工作正常 – Kaplan

+0

对不起,按照http://api.jquery.com/click/,你是正确的,它也可以用来触发事件处理程序时没有参数传递。我会更新我的答案。 –

0

你已经做调用这个处理程序: http://jsfiddle.net/a3tNM/

$('#item1').click();$(#itemsList li).eq(1).click();不会ca同样的处理程序。它创造了一个新的。

相关问题