在jQuery中处理多次单击事件,其中顺序很重要

时间:2010-03-10 14:13:04

标签: javascript jquery mouseclick-event event-handling

我正在开发一个使用ajax的php应用程序。在我想要通过jQuery劫持链接的所有链接上,我将类ajaxlink直接添加到链接

<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成功返回时才需要触发。

任何人对此有任何想法。

2 个答案:

答案 0 :(得分:3)

您可以在整个过程中重构正常的点击功能并执行此操作:

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

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

答案 1 :(得分:1)

您是否尝试过对ajax请求使用完整回调? Jquery Docs for ajaxComplete