我有一个包含一些问题和答案的页面,默认情况下答案会被折叠。当他们点击问题时,我展开隐藏的答案-div。问题是,当我单击这些问题时,窗口会跳到屏幕顶部。这不是一个大问题,但我觉得很烦人,因为我不得不再次向下滚动这个问题。
链接看起来像这样:
<a href="#" id="myID">Myquestion</a>
我已经使用jQuery和.click
作为事件监听器。
有没有简单的方法可以避免这种情况,或者我是否必须使用.scroll
并找到问题的坐标?我宁愿避免这种情况。
编辑:我知道我可以使用锚点来做这件事,但我想避免任何跳跃的屏幕。
答案 0 :(得分:25)
您需要将preventDefault()
添加到点击处理程序中。这将停止浏览器执行它自己的链接处理程序,并且只运行您指定的代码。
示例:
$("#myID").click(function(e) {
e.preventDefault();
// Do your stuff
});
答案 1 :(得分:5)
不要将A标签用于与导航无关的任务。它不是语义标记,也不会优雅地降级。改为使用按钮。
答案 2 :(得分:4)
你可以很简单地做到:
只需在!
:
href
即可
<a href="#!" id="myID">Myquestion</a>
替代jQuery的方式是:
$("#myID").click(function(e) {
e.preventDefault(); // one way
return false; // second way prevent default click action from happening
});
答案 3 :(得分:2)
$("#myID").click(function(e) {
if(e.preventDefault)
e.preventDefault();
else
e.stop();
});
仅 e.preventDefault()
在旧版IE中无效。
答案 4 :(得分:2)
实际上,最简单的方法是从锚标记中删除href属性。从HTML5开始,锚标签不需要包含href属性是语义的。
所以
<a id="myID">Myquestion</a>
而不是
<a href="#" id="myID">Myquestion</a>
适用于IE8 +,Chrome和Firefox。请注意:链接css样式不适用于不包含href属性的锚标记。
如果您需要href属性和/或IE7兼容性,那么
$("#myID").click(function(e) {
if(e.preventDefault)
e.preventDefault();
else
e.stop();
});
可能是最好的方式。
答案 5 :(得分:1)
$('a').click( function() {
if ($(this).attr("href") == window.location.hash) {
event.preventDefault()
}
});
答案 6 :(得分:0)
您正在寻找event.preventDefault
(请参阅jQuery API)。
$(...).click(function(e) {
e.preventDefault();
// your code
});
答案 7 :(得分:0)
在你的职能范围内:
And I've used jQuery and .click as event-listener.
看起来像:
$("#myID").click(function(){});
将此更改为(不要忘记function(e)
内的参数:
$("#myID").click(function(e){
e.preventDefault();
});
答案 8 :(得分:0)
滚动回答内容的示例:
$("#question_title").click(function(){
var $answer=$("#answer");
$answer.slideDown();
$.scrollTo( $answer, 800 );
return false;
});
我使用的是jQuery scrollTo插件。
答案 9 :(得分:0)
$('body').on('click', '[href^=#]', function (e) {
e.preventDefault()
});
如果选择器ex ..&#34; body&#34;在初始渲染期间是否存在然后使用任何选择器.. id ...来指向通用的jQuery(从1.8.2开始)迭代。 &#34; On处理程序调用一个名为&#34; bind&#34;的方法。用于DOM的新增内容&#34; ,.使用&#34; [href ^ =#]将选择部分标记中的任何href,但您可以用任何内容替换部分,或者将部分替换为click事件。这种技术非常适合动态创建DOM的内容
答案 10 :(得分:0)
如果在“#”中添加“\”,则会阻止它出现在顶部。
<a href="#\" id="myID">Myquestion</a>
答案 11 :(得分:0)
<强> HTML:强>
<a id="like-post" href="#\">like</a>
<强> JavaScript的:强>
$('body').delegate('#like-post','click',function(e) {
e.preventDefault();
.....
});