防止默认不防止其内部按钮

时间:2013-08-29 00:35:43

标签: javascript jquery

我无法阻止默认以防止采取行动。如果答案太简单,我很抱歉,但我无法找到错误。为什么不阻止进入链接? jsfiddle如下。

http://jsfiddle.net/zwY5p/34/

$('#theForm').click(function(e) {
    event.preventDefault();
    alert('FORM!');
});

5 个答案:

答案 0 :(得分:4)

e != event

$('#theForm').click(function(event) {
    event.preventDefault();
    alert('FORM!');
});

传递给处理函数的参数是您执行preventDefault所需的参数。在您的代码中,您传递e,但在preventDefault上调用event


preventDefault会阻止默认的浏览器操作。 取消内嵌JavaScript ,因为它首先运行。如果你必须覆盖它,只需删除它(不需要事件监听器):

$('#theForm').removeAttr('onclick').

答案 1 :(得分:2)

您的活动参数名称e和您使用的变量event不同,

$('#theForm').click(function(event) {
    event.preventDefault();
    alert('FORM!');
});

答案 2 :(得分:2)

除了在其他答案中指出的错误之外,还有另一个小问题,特别是在你的标记声明中:

<!-- 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添加的处理程序。 现在,您必须针对相同的元素和事件以及应用条件重新评估两个不同处理程序的需求。你真的需要这样做吗?

答案 3 :(得分:0)

您正在使用2次“点击”活动。 您最终使用了preventDefault,并在第一次单击事件运行后使用它。

如果您将按钮设为href,则您的preventDefault将正常工作。 它也会更有意义,因为JS将与HTML标记分开。

此外,您当然必须使用相同的参数名称。 (函数(事件),例如event.preventDefault)。

答案 4 :(得分:0)

如果您将“e”作为事件传递给该函数,那么您应该仅针对已经传递的“e”而不是“事件”阻止默认操作。

$('#theForm').click(function(e) {
    e.preventDefault();
    alert('FORM!');
});

jQuery preventDefault()方法:http://api.jquery.com/event.preventDefault/