如何在onclick方法中阻止默认事件?我有一个带自定义值的方法。
<a href="#" onclick="callmymethod(24)">Call</a>
function callmymethod(myVal){
//doing custom things with myVal
//here I want to prevent default
}
如何在onclick方法中阻止默认事件?我有一个带自定义值的方法。
<a href="#" onclick="callmymethod(24)">Call</a>
function callmymethod(myVal){
//doing custom things with myVal
//here I want to prevent default
}
让您的回调函数返回 false
并将其传递给 onclick
处理程序:
<a href="#" onclick="return callmymethod(24)">Call</a>
function callmymethod(myVal){
//doing custom things with myVal
//here I want to prevent default
return false;
}
为了编写易于维护的代码,你应该避免使用“内联JavaScript”(即直接在元素标签中编写代码),而是通过引入JavaScript源文件来修改元素的行为(这称为不侵入式JavaScript)。
示例:
<a href="#" id="myAnchor">Call</a>
代码(独立文件):
// Code example using Prototype JS API
$('myAnchor').observe('click', function(event) {
Event.stop(event); // suppress default click behavior, cancel the event
/* your onclick code goes here */
});
在我的看法中,答案是错误的!他要求使用 event.preventDefault();
但当你仅使用 return false;
时,它会同时调用 event.preventDefault();
和 event.stopPropagation();
!
你可以通过以下方式解决它:
<a href="#" onclick="callmymethod(event, 24)">Call</a>
function callmymethod(e, myVal){
//doing custom things with myVal
//here I want to prevent default
e = e || window.event;
e.preventDefault();
}
window.event
,但并非所有浏览器都支持它。 - Linus Kleene = e || window.event
)并不依赖于window.event
:https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes#event_handler_attributes - YouJiachengreturn false;
吗?我们到底是在返回 false 给谁呢? - Kellen Stuart你可以使用纯JavaScript捕获事件,然后通过preventDefault()方法阻止它
document.getElementById("xyz").addEventListener('click', function(event){
event.preventDefault();
console.log(this.getAttribute("href"));
/* Do some other things*/
});
在href标签中,只需将“#”替换为“javascript:void(0)”即可。
<a href="javascript:void(0);" onclick="callmymethod(24)">Call</a>
这对我起作用了
<a href="javascript:;" onclick="callmymethod(24); return false;">Call</a>
另一种方法是在 onclick
属性中使用 event
对象(无需添加额外参数以传递事件)。
function callmymethod(myVal){
console.log(myVal);
}
<a href="#link" onclick="event.preventDefault();callmymethod(24)">Call</a>
有多种不同的答案。即使多年过去了,这个问题仍然很重要。因此,这里是汇编:
// 1
function myFn1 (e, value) {
console.log('value:', value)
e.preventDefault();
}
// 2
function myFn2 (value) {
console.log('value:', value)
return false;
}
// 3,5,6,7
function myFn3 (value) {
console.log('value:', value)
}
// 4
document.getElementById("clicki-1").addEventListener('click', function(event){
event.preventDefault();
console.log('value:',this.getAttribute("data-value"));
});
<h3>onclick Attribute</h3>
<div>
<a href="/hello" onclick="myFn1(event, 42)">Click 1</a>
</div>
<div>
<a href="/hello" onclick="return myFn2(42)">Click 2</a>
</div>
<div>
<a href="/hello" onclick="myFn3(42); return false;">Click 3</a>
</div>
<h3>EventListener (addEventListener)</h3>
<div>
<a href="/hello" id="clicki-1" data-value="42">Click 4</a>
</div>
<h3>onclick Attribute without linkaddress when hovering</h3>
<div>
<a href="javascript:;" onclick="event.preventDefault(); myFn3(42)">Click 5</a>
</div>
<div>
<a href="javascript:void(0);" onclick="myFn3(42)">Click 6</a>
</div>
<div>
<a href="javascript:;" onclick="myFn3(42)">Click 7</a>
</div>
<h5>Set Anchor Hashtag</h5>
<div>
<a href="#" onclick="myFn3(42)">Click 8</a>
</div>
如果需要快速处理,我更喜欢第二种方式,使用return false;。否则,可以选择第四种方式(AddEventListener)。
在所有HTML页面中更改函数用法为return false
会太繁琐。
因此,这里提供了一个经过测试的解决方案,仅修补函数本身:
function callmymethod(myVal) {
// doing custom things with myVal
// cancel default event action
var event = window.event || callmymethod.caller.arguments[0];
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
return false;
}
这样做可以正确地防止IE6、IE11和最新版本的Chrome在onclick事件处理程序完成后访问href="#"
。
致谢:
onLoaded
更改为no wrap
。或者简单地编写自己的 .html 标记。 - Linus KleenpreventDefault
,问题是如何“阻止默认点击”。 - Linus Kleen