2013-08-29 78 views

回答

4

e != event

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

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


preventDefault防止默认浏览器操作。 它确实不是取消内嵌JavaScript,因为它首先运行。如果你必须重写,只是将其删除(没有必然的事件侦听器):

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

HTTP://的jsfiddle。net/zwY5p/45 /不工作 –

+0

@DannyPelletier - 'preventDefault'阻止*默认浏览器操作*。它不会取消内联JavaScript,因为它首先运行。如果你必须覆盖它,只需删除它(不需要事件监听器):'$('#theForm')。removeAttr('onclick')'。 –

2

你的事件参数的名称e并且正在使用event是不同的变量,

$('#theForm').click(function(event) { 
    event.preventDefault(); 
    alert('FORM!'); 
}); 
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添加了处理程序的单个元素。 现在,您必须重新评估两个不同处理程序对同一元素和事件以及应用条件的需求。你真的需要这样做吗?

0

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

如果你让你的按钮一个href,那么你的preventDefault将工作。 它也会更有意义,因为JS将从HTML标记中分离出来。

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

0

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

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

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