2010-01-04 121 views
1

当我使用jquery .html或.append在DOM中添加元素时,页面跳转到该位置。防止页面跳转.html和.append?

我该如何让它不跳,因为我希望我的用户能够点击“保存线程到收藏夹”,它不会跳转到“我保存的线程”,因此用户必须在列表中向下导航再次使用线程。

编辑:我已经使用这个:

// save thread 
    $("a.save_thread").live("click", function(event) { 
     event.preventDefault(); 
     $.post('controllers/ajaxcalls/threads.php', {method: 'save_thread', thread_id: event.target.id}, function(data) { 
     }, 'json'); 
     return false; 
    }); 

但返回假的没有做任何事情。实际上,虽然它不使用append()或html(),但它仍然跳转到页面开始。

+0

这是什么浏览器出现? – kender 2010-01-04 09:57:48

+0

safari和firefox – ajsie 2010-01-04 09:58:54

+0

任何你使用'live'而不是'click'的理由?在我看来,当点击起泡到“文档”时,防止他链接的默认操作为时已晚。 – 2010-01-07 04:07:44

回答

4

return falsepreventDefault是正确的做法,以停止链接被关注。检查你的JavaScript错误控制台。如果处理函数中有一个异常,它将不会返回false,并且链接将会被执行。

但是,您应该考虑将链接更改为<button>。你在这里所拥有的不是一个链接,也不是特别与任何地方的联系;这是一个行动。按钮是一种更好的建模方式,因为它没有遵循链接的行为,或者允许用户在新选项卡中打开链接的目标,或者右键单击添加到书签(等等)。因此,您不必担心阻止默认操作来停止页面移动。

如果你不想让它看起来像一个3D按钮,你总是可以使用CSS来重新设置它,例如。 border: none; background: white; color: blue; text-decoration: underline;。虽然你不能完全在IE中重新安装它,这会错误地增加一些额外的填充,但这通常并不重要。

+0

IE中的填充可以用'overflow:hidden;'移除;) – BalusC 2010-01-07 03:32:38

+0

你的意思是'width:auto;溢出:可见;'技巧?这摆脱了水平超级压缩,但不是垂直像素的几个。 “溢出:隐藏”对我来说什么都没有,除非有更多的东西......? – bobince 2010-01-07 15:55:47

3

我不认为它是.html().append()跳跃。而是更多的,请检查你函数在执行返回false:

$('a.pseudolink').click(function() { 
    $(this).html('foobar!'); 
    return false; // !!! 
}); 

这样可以防止,点击<a class="pseudolink" href="#newcontent">,链接目标被激活。

+2

另外值得一提的是'event.preventDefault()' – 2010-01-04 09:54:06

+0

它不起作用。阅读我更新的问题 – ajsie 2010-01-04 09:56:43

1

一个真正的杂牌组装电脑,以防止这将是使这样的帖子之前,移除元素href属性:

$("a.save_thread").live("click", function(event) { 
    $(this).removeAttr("href"); 
    $.post('controllers/ajaxcalls/threads.php', {method: 'save_thread', thread_id: event.target.id}, function(data) {}, 'json');   
}); 

你也可以通过保存它,之后你将它放回恢复的HREF已经完成你的行动。

var href = $(this).attr('href'); 
//do actions 
$(this).attr('href', href); 

我在自己的开发成功使用此之前,看它是否适合,虽然你的目的。