Mik*_*ike 73 javascript jquery
当我想要一些链接不做任何事情但只响应javascript动作时,什么是避免链接滚动到页面顶部边缘的最佳方法?
我知道几种方法,它们似乎都很好:
<a href="javascript:void(0)">Hello</a>
Run Code Online (Sandbox Code Playgroud)
要么
<a id="hello" href="#">Hello</a>
<script type="text/javascript>
$(document).ready(function() {
$("#toto").click(function(){
//...
return false;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
乃至 :
<a id="hello" href="#">Hello</a>
<script type="text/javascript>
$(document).ready(function() {
$("#toto").click(function(event){
event.preventDefault();
//...
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
你有什么偏好吗?为什么?在哪些条件?
PS:当然上面的例子假设你使用的是jquery,但是mootools或prototype的等价物.
bob*_*nce 68
捆绑:
javascript:
URL始终是一个可以避免的恐怖;对策:
return false
手段既preventDefault
和stopPropagation
,因此,如果您关心接收事件通知父元素的含义是不同的;preventDefault
/ stopPropagation
通常在IE中拼写不同(returnValue
/ cancelBubble
).然而:
<a>
对于这个来说并不是一个理想的标记.如果有人试图对其进行中间点击,或将其添加到书签或链接所具有的任何其他可用性,那么就会出错.#thatelementsid
并使用不显眼的脚本来从链接名称中获取元素ID.您还可以嗅探location.hash
文档加载以打开该元素,因此该链接在其他上下文中变得有用.<input type="button">
或者<button type="button">
.如果需要,您可以使用CSS将其设置为看起来像链接而不是按钮.<span>
代替.您可以添加一个tabindex
属性,使其在大多数浏览器中可以访问键盘,尽管这不是真正标准化的.您还可以检测其上的Space或Enter等按键以激活.这有点令人不满意,但仍然非常受欢迎(因此,对于一个,它是这样的).<input type="image">
.这具有完全可视控制按钮的可访问性优势,但仅适用于纯图像按钮.kar*_*m79 18
我能想到的唯一优势就是javascript:void(0)
即使是最老的浏览器也会支持它.也就是说,我会使用你提到的其他不引人注目的方法之一:
event.preventDefault()
并且return false
可以互换使用.event.preventDefault()
将根据需要阻止页面重新加载,但会允许click事件冒泡到父级.如果你想停止冒泡,你可以结合使用它event.stopPropagation
.return false
另外会阻止事件冒泡到父母.我在上面的第一点说'可互换',因为很多时候我们不关心事件是否会影响到父母.然而,当你需要一些微调,我们应该考虑分两个和三个.
请考虑以下示例:
<div>Here is some text <a href="www.google.com">Click!</a></div>?
$("a").click(function(e) {
e.preventDefault();
});
$("div").click(function() {
$(this).css("border", "1px solid red");
});
?
Run Code Online (Sandbox Code Playgroud)
单击锚点将阻止触发事件的默认操作,因此浏览器不会重定向到www.google.com.但是,事件仍会"冒泡"并导致div的点击事件触发,这会在其周围添加边框.添加e.stopPropagation()
或只是 return false
和div的点击事件不会触发.你可以在这里弄乱它:http://jsfiddle.net/cMKsN/1/