我无法防止默认情况下阻止操作。我很抱歉,如果答案太简单了,但我不能找到错误。为什么它不阻止进入链接?下面给出的jsfiddle。防止默认无法防止其内部按钮
$('#theForm').click(function(e) {
event.preventDefault();
alert('FORM!');
});
我无法防止默认情况下阻止操作。我很抱歉,如果答案太简单了,但我不能找到错误。为什么它不阻止进入链接?下面给出的jsfiddle。防止默认无法防止其内部按钮
$('#theForm').click(function(e) {
event.preventDefault();
alert('FORM!');
});
e != event
$('#theForm').click(function(event) {
event.preventDefault();
alert('FORM!');
});
传递给处理函数的参数是你需要在执行preventDefault
什么。在您的代码中,您传递的是e
,但在event
上调用preventDefault
。
preventDefault
防止默认浏览器操作。 它确实不是取消内嵌JavaScript,因为它首先运行。如果你必须重写,只是将其删除(没有必然的事件侦听器):
$('#theForm').removeAttr('onclick').
你的事件参数的名称e
并且正在使用event
是不同的变量,
$('#theForm').click(function(event) {
event.preventDefault();
alert('FORM!');
});
比错误其他在其他的答案指出,还有另外一个小的问题,特别是在你的标记声明:
<!-- Use either the closing tag or the slash (/) in the opening tag -->
<button id="theForm" onclick="location.href='http://www.example.com'" />
go to google
</button>
在主题中,您有两个不同处理程序附加到button
元素,他们都处理click
事件,但他们仍然不同和分开的事情。 jQuery将不知道在标记中定义的处理程序:
var btn = document.getElementById('theForm');
jQuery._data(btn, "events");
将返回一个阵列,其是通过jQuery添加了处理程序的单个元素。 现在,您必须重新评估两个不同处理程序对同一元素和事件以及应用条件的需求。你真的需要这样做吗?
您正在使用2个“点击”事件。 您最终使用preventDefault一次,并在第一次单击事件运行后使用。
如果你让你的按钮一个href,那么你的preventDefault将工作。 它也会更有意义,因为JS将从HTML标记中分离出来。
另外,当然,您必须使用相同的参数名称。 (函数(事件),例如event.preventDefault)。
如果您将“e”作为事件传递给函数,那么您应该防止仅针对已传递的“e”而不是“event”的默认操作。
$('#theForm').click(function(e) {
e.preventDefault();
alert('FORM!');
});
jQuery的preventDefault()方法:http://api.jquery.com/event.preventDefault/
HTTP://的jsfiddle。net/zwY5p/45 /不工作 –
@DannyPelletier - 'preventDefault'阻止*默认浏览器操作*。它不会取消内联JavaScript,因为它首先运行。如果你必须覆盖它,只需删除它(不需要事件监听器):'$('#theForm')。removeAttr('onclick')'。 –