什么是evt.preventDefault()相反;

一旦我解雇了evt.preventDefault() ,我怎么能再次恢复默认操作?

根据@Prescott的评论,与之相反的是:

 evt.preventDefault(); 

可能:

基本上等同于“默认” ,因为我们不再阻止它。

否则,我倾向于指出你提供的答案,由另一个评论和答案:

如何解除调用event.preventDefault()(使用jQuery)的侦听器?

如何重新启用event.preventDefault?

请注意,第二个已被接受与一个示例解决scheme,由红色方块(这里发布的直接解决scheme,以防止这种情况下,重复):

 $('form').submit( function(ev) { ev.preventDefault(); //later you decide you want to submit $(this).unbind('submit').submit() }); 
 function(e){ e.preventDefault(); 

和它的对面

 function(e){ return true; } 

干杯!

在继续从jQuery中的click事件的链接之前处理命令:

例如: <a href="http://google.com/" class="myevent">Click me</a>

使用jQuery防止并遵循:

 $('a.myevent').click(function(event) { event.preventDefault(); // Do my commands if( myEventThingFirst() ) { // then redirect to original location window.location = this.href; } else { alert("Couldn't do my thing first"); } }); 

或者干脆运行window.location = this.href; preventDefault();

我会build议以下模式:

 document.getElementById("foo").onsubmit = function(e) { if (document.getElementById("test").value == "test") { return true; } else { e.preventDefault(); } } <form id="foo"> <input id="test"/> <input type="submit"/> </form> 

…除非我失去了一些东西。

http://jsfiddle.net/DdvcX/

我不得不在jQuery中延迟表单提交以执行asynchronous调用。 这是简化的代码

 $("$theform").submit(function(e) { e.preventDefault(); var $this = $(this); $.ajax('/path/to/script.php', { type: "POST", data: { value: $("#input_control").val() } }).done(function(response) { $this.unbind('submit').submit(); }); }); 

好 ! 它适用于点击事件:

 $("#submit").click(function(e){ e.preventDefault(); -> block the click of the sumbit ... do what you want $("#submit").unbind('click').click(); // the html click submit work now ! }); 

我把这个“相反”的东西模拟成一个事件。 你可以使用.createEvent()

以下是Mozilla的例子:

 function simulateClick() { var evt = document.createEvent("MouseEvents"); evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); var cb = document.getElementById("checkbox"); var canceled = !cb.dispatchEvent(evt); if(canceled) { // A handler called preventDefault alert("canceled"); } else { // None of the handlers called preventDefault alert("not canceled"); } } 

参考: document.createEvent


jQuery的.trigger()所以你可以触发元素的事件 – 有时是有用的。

 $('#foo').bind('click', function() { alert($(this).text()); }); $('#foo').trigger('click'); 

我已经使用了下面的代码。 它对我来说工作正常。

 $('a').bind('click', function(e) { e.stopPropagation(); }); 

()上的 jquery可能是另一个解决scheme。 特别是当涉及到命名空间的使用时。

jquery on()只是绑定事件的当前方式(而不是bind())。 off()是解开这些。 而当您使用命名空间时,您可以添加和删除多个不同的事件。

 $( selector ).on("submit.my-namespace", function( event ) { //prevent the event event.preventDefault(); //cache the selector var $this = $(this); if ( my_condition_is_true ) { //when 'my_condition_is_true' is met, the binding is removed and the event is triggered again. $this.off("submit.my-namespace").trigger("submit"); } }); 

现在使用命名空间,你可以添加多个这些事件,并能够删除这些,这取决于您的需求..虽然提交可能不是最好的例子,这可能会派上用场,点击或按键或任何..

你可以在“preventDefault”方法后使用这个

//这里evt.target返回默认事件(例如:defult url等)

 var defaultEvent=evt.target; 

//这里我们保存默认事件..

 if("true") { //activate default event.. location.href(defaultEvent); }