通过Ajax更改jQuery中的链接

时间:2012-11-15 20:49:40

标签: jquery ajax

我正在使用jquery来绑定链接上的一些点击事件。使用,以下代码我已经能够通过ajax更改链接的href - 但是当href更改并且我尝试单击链接时,没有任何反应。

想知道是否有人能发现我遗漏的明显错误。

    $('a.shortlist_action').bind('click',function(){

        item = $(this);
        href = item.attr('href');

        parent = $(this).parent('.shortlist_action_container');
        item = $(this);

        $.ajax({
          url: $(this).attr('href'),
          success: function(data) {
                item.addClass('largeviewplannerbutton');

                item.attr("href", '/myaccount/planner');
            }
          }

        });
        // stop event propagation here
        return false;
});

谢谢。

3 个答案:

答案 0 :(得分:1)

删除return false,这会阻止事件传播,因为您的评论建议..

有关详细信息,请参阅When and why to 'return false' in javascript?

答案 1 :(得分:1)

// stop event propagation here
return false;

return false会阻止传播默认的bahviour。后者遵循<a href>元素的超链接。你真的应该只在这里调用e.stopPropagation()(并在函数签名中定义e)。

答案 2 :(得分:1)

如前所述,jQuery事件处理程序中的return false会阻止该事件的默认行为,当然,点击链接的默认行为是导航到链接href中的URL

因此,使用当前代码,每次单击都会对当前href中的URL进行Ajax调用,而不进行默认导航。即,首次单击该元素会对原始URL进行Ajax调用,然后更改URL。没有默认导航。然后第二次单击对 new URL进行Ajax调用,但同样没有默认导航。

如果想法只是第一次点击应该执行Ajax并更新href,第二次和后续点击只会标准导航到新网址,那么您应该使用.one() method而不是.bind().one()方法绑定一个每个元素只运行一次的事件处理程序。

或者,您需要在函数内添加一些额外的逻辑来决定是否更改href以及是否返回false以取消默认点击行为。和/或可能添加对.off()(或.unbind())的调用,以便在您不再需要特定链接时删除点击处理程序。