通过Ajax更改jQuery中的链接

通过Ajax更改jQuery中的链接,jquery,ajax,Jquery,Ajax,我正在使用jquery绑定链接上的一些单击事件。使用下面的代码,我已经能够通过ajax更改链接的href-但是当href更改并且我尝试单击链接时,什么也没有发生 想知道是否有人能发现我遗漏的明显错误 $('a.shortlist_action').bind('click',function(){ item = $(this); href = item.attr('href'); parent = $(this).parent('.sho

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

谢谢。

删除
返回false
,正如您的评论所示,这会阻止事件传播


有关更多详细信息,请参阅。

删除
返回false
,正如您的评论所示,这会阻止事件传播

// stop event propagation here
return false;
有关更多详细信息,请参阅

// stop event propagation here
return false;
return false
防止传播和默认行为。后者在
元素的超链接后面。实际上,您应该只在此处调用
e.stopPropagation()
(并在函数签名中定义
e


return false
防止传播和默认行为。后者在
元素的超链接后面。实际上,您应该只在此处调用
e.stopPropagation()
(并在函数签名中定义
e

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

因此,对于当前代码,每次单击都会对当前
href
中的URL进行Ajax调用,而没有默认导航。也就是说,第一次单击元素会对原始URL进行Ajax调用,然后更改URL。没有默认导航。然后,第二次单击会对新URL进行Ajax调用,但同样没有默认的导航

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


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

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

因此,对于当前代码,每次单击都会对当前
href
中的URL进行Ajax调用,而没有默认导航。也就是说,第一次单击元素会对原始URL进行Ajax调用,然后更改URL。没有默认导航。然后,第二次单击会对新URL进行Ajax调用,但同样没有默认的导航

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


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

不是答案,只是一些注释。你有
item=$(这个)
两次,您可能希望使用
url:href
而不是
url:$(this).attr(href)
。第一次单击链接将执行Ajax并更改href,然后第二次和后续单击将实际导航到新url,而无需进一步Ajax?这对用户来说不是有点困惑吗?嗨,人们会点击链接将项目添加到一个类似书签的列表中。一旦他们点击了链接,按钮就会变成“查看列表”按钮。不是答案,只是一些注释。你有
item=$(这个)
两次,您可能希望使用
url:href
而不是
url:$(this).attr(href)
。第一次单击链接将执行Ajax并更改href,然后第二次和后续单击将实际导航到新url,而无需进一步Ajax?这对用户来说不是有点困惑吗?嗨,人们会点击链接将项目添加到一个类似书签的列表中。单击链接后,按钮将变为“查看列表”按钮。