2010-03-10 81 views
3

我正在使用ajax的应用程序的PHP工作。在所有我想要得到的jQuery劫持我添加类ajaxlink的链接直接进入该链接的链接在jQuery中处理多个点击事件,其中重要的顺序

<a class="someclass ajaxlink" href="somelocation1">goto1</a> 
<a class="someclass ajaxlink" href="somelocation2">goto2</a> 
<a class="someclass ajaxlink" href="somelocation3">goto1</a> 

的JavaScript看起来像这样

$('.ajax-link').click(function(){get link with ajax}); 

如果用户已启用JavaScript他将通过ajax获取页面。一个特定的我有一个多页,所以我有相同的功能,为所有页面生成相同的链接。

现在我的问题是在一个页面中的一个链接,我想做一些不同的事情。它必须在ajax页面返回成功时触发另一个函数。现在我有这样的代码。

<div class"specialclass"> 
    <a class="someclass ajaxlink" href="somelocation1">goto1</a> 
    <a class="someclass ajaxlink" href="somelocation2">goto2</a> 
    <a class="someclass ajaxlink" href="somelocation3">goto1</a> 

    <a class="someclass ajaxlink special-1" href="somelocation">goto</a> 
    <a class="someclass ajaxlink special-2" href="somelocation">goto</a> 
    <a class="someclass ajaxlink special-3" href="somelocation">goto</a> 
</div> 

$('.ajax-link').click(function(){get link with ajax}); 
$('.specialclass .special-1, 
    .specialclass .special-2, 
    .specialclass .special-3').click(function(){get link with ajax}); 

此设置,因为我想要在正常情况下执行在同一容器中的普通链接。只有一个我想添加另一个点击事件的特殊链接。我认为我不能将此事件添加到正常的点击事件中,因为它只需在应用程序的特定页面中触发。在所有其他页面上,它将是不必要的代码。

然而,这个设置产生了错误,因为特殊类的点击首先被触发,然后是ajaxlink类。这必须切换,只有在ajaxlink返回成功时才会触发。

任何人都有这个想法。

回答

3

你可以重构你的正常点击功能进行的全过程,并做到这一点:

var normalClick=function(){/*get link with ajax*/}; 

$('.ajax-link').click(normalClick); 
$('.specialClass').click(
    function(){ 
    normalClick(); 
    /* special click code */ 
    } 
); 
+0

谢谢,我觉得这个解决方案将工作的伟大。这样,我可以做更多的Ajax完成后,我会试试看。 – 2010-03-10 14:27:25

+0

我对此有疑问。使用这种方法,如果链接同时具有ajax-link类和spcialclass,normalclick事件将被触发两次? – 2010-03-10 14:37:58

+1

我加了event.stopImmediatePropagation();到specialClass,现在工作正常,谢谢! – 2010-03-10 14:52:38