0

我正在使用 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;
});

谢谢你。

4

3 回答 3

1

Remove return false,正如您的评论所建议的那样,它正在阻止事件传播..

请参阅何时以及为什么在 javascript 中“返回 false”?更多细节。

于 2012-11-15T20:51:42.467 回答
1
// stop event propagation here
return false;

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

于 2012-11-15T20:53:05.617 回答
1

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

因此,对于您当前的代码,每次单击都会对当前的 URL 进行 Ajax 调用href,而没有默认导航。即,第一次单击元素会对原始 URL 进行 Ajax 调用,然后更改 URL。没有默认导航。然后第二次单击对URL 进行 Ajax 调用,但再次没有默认导航。

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

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

于 2012-11-15T21:03:39.633 回答