处理多个点击事件的最佳方式

问题描述:

我想在应用程序中单击链接时完成一些操作。处理多个点击事件的最佳方式

例如,我正在创建一个在文档中包含多个内部链接的手册。目前,我会处理它们像这样:

function waitForClick() 
{ 
    $('#about').click(function() 
    { 
     $('#container').slideDown(); 
    }); 

    $('#using').click(function() 
    { 
      changeContent... 
    }); 

    <!-- etc, etc -->    

} 

有没有更好的方式来处理多个点击事件,所以,我并不需要一个事件的每一个项目。我确信必须有一种方法来委派哪个项目被点击。

HTML:

<li><a id="about" href="#">About this Application</a></li> 
<li><a id="using" href="#">Using this Manual</a></li> 
<li><a id="pages" href="#">Pages:</a></li> 

<!-- etc, etc --> 

这被认为是对说明书内容的表。所以会有很多本地链接。

+1

你能后的HTML的样品你写的吗? – Bojangles 2012-07-08 16:05:02

+0

如果你打算让内容发生变化,为什么不使用[jQuery UI Tabs](http://jqueryui.com/demos/tabs/)? – Mottie 2012-07-08 16:42:49

+0

它在移动设备上,我不想要标签?就那么简单。 – Brendan 2012-07-08 18:19:11

个人我会使用类似下面的东西。它避免了大量的事件被单独投射,并且足够满足您的需求。你所做的只是添加一个“clickEventClasss”类(或者任何需要你喜欢的东西)给每个应该有一个事件的元素添加一个id,以便你可以识别每个元素。

function waitForClick() 
{ 

    $('.clickEventClass').click(function() { 

     var id = $(this).attr('id'); 

     switch(id) { 
      case 'about': 
      //Logic 
      break; 
     case 'using': 
      //Logic 
      break; 
     } 

    });   

} 

您可以将点击事件绑定到类而不是ID。

<a class="navigationLink" href="home.com">Home</a> 
<a class="navigationLink" href="about.com">About</a> 
<a class="navigationLink" href="contactus.com">Contact Us</a> 

$(".navigationLink").click(function() { 
    //Do something cool 
}); 
+0

伟大的思想一样! – Ashley 2012-07-08 16:10:25

+0

确实。你击败了我。 – bmorenate 2012-07-08 16:13:08

您可以使用您将类型为click事件的类。

在此之后,以下是可能的:

$(".class").click(function() 
{ 
    if($(this).attr("id") == "about") 
    { 
     //code here 
    } 
    else if($(this).attr("id") == "using") 
    { 
     //code here 
    } 
} 
+2

应该在开始条件之前将ID存储在变量中,反复使用$(this)(或任何元素)比抓取它并将其存储在变量中要慢,因为它不需要访问DOM over并结束。 – Ashley 2012-07-08 16:12:10

+1

使用'this.id'会更容易 – Mottie 2012-07-08 16:38:43