2011-04-13 79 views
107

一旦我解僱了evt.preventDefault(),我該如何恢復默認操作?與evt.preventDefault()相反的是什麼?

+3

我覺得一般的功能將運行,然後默認行爲將運行,所以你永遠不會調用evt.preventDefault()在第一個地方 – Prescott 2011-04-13 15:44:19

+0

你能給我們一個你想要做什麼的例子嗎? – 2011-04-13 15:45:56

+1

可能重複? :http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault – Nobita 2011-04-13 15:47:09

回答

2

我提出「相反」將模擬一個事件。你可以使用.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'); 
58

按照評論說@Prescott,相反:

evt.preventDefault(); 

可能是:

本質上等同於'做默認',因爲我們」不再阻止它。

否則我傾向於給你點到另一個意見和答案提供的答案:

How to unbind a listener that is calling event.preventDefault() (using jQuery)?

How to reenable event.preventDefault?

注意,第二個已經接受了一個示例解決方案,給出由redsquare(這裏發佈的直接解決方案,如果這不是關閉作爲重複):

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

這一個完美解決了我的問題。感謝您提供該片段! – 2016-02-03 13:03:31

+0

謝謝!在這個問題上我正在摸索一段時間(我需要在提交表單之前停止並檢查一些內容,而不是在某些情況下提交,並在其他情況下提交)。 – 2018-02-19 19:00:25

4

我會建議以下模式:

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/

44
function(evt) {evt.preventDefault();} 

和與其相對

function(evt) {return true;} 

喝彩!

+7

這對我有效,但我想知道是否有人可以更好地解釋它爲什麼? – edhedges 2013-05-16 13:18:52

+0

這不會撤消preventDefault(),事實上它的作用與您會忽略'return true'一樣:什麼也不做。 – brannigan 2017-05-15 09:37:34

+0

不起作用了。 ! – yogihosting 2017-08-01 11:55:33

5

我不得不在jQuery中延遲表單提交以執行異步調用。下面是簡化的代碼...

$("$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(); 
    }); 
}); 
+0

此場景中的另一個選項可能是使用input type =「button」並綁定到click事件,而不是使用input type =「submit」並綁定到提交事件。 – Strixy 2013-06-19 18:54:24

0

後就可以 「的preventDefault」 方法使用該

//這裏evt.target返回默認的事件(例如:defult網址等)

var defaultEvent=evt.target; 

//我們保存默認事件..

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

要處理一個命令之前繼續從click事件jQuery中的鏈接:

如:<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();

+1

沒錯,但是這裏假定preventDefault是一個鏈接,並且不會在文檔主體上表示touchmove。 – Bangkokian 2015-09-06 10:51:04

+0

這不是問題所在。 – 2016-09-21 12:56:49

-1

我已經使用了下面的代碼。這對我來說可以。

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

[如jQuery API文檔中所述](http://api.jquery.com/event.stoppropagation/),這可以防止事件冒泡DOM樹,從而阻止任何父處理程序被通知事件。這不同於/ event.preventDefault()'; – 2015-01-20 14:53:30

+1

這不是問題的問題。 – 2016-09-21 12:57:02

4

OK!它適用於點擊事件:

$("#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 ! 

}); 
1

jquery on()可能是另一種解決方案。特別是當涉及到使用namespaces。 ()只是綁定事件(而不是綁定())的當前方式。 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"); 
    } 
}); 

現在使用的命名空間,你可以添加這些事件的多,並能消除那些,根據您的需要。雖然提交可能不是最好的例子,這可能會派上用場上單擊或按鍵或任何..

0

您可以隨時使用這個連接在你的腳本中一些單擊事件:

location.href = this.href; 

例子用法是:

jQuery('a').click(function(e) { 
    location.href = this.href; 
}); 
1

此代碼工作對我來說,我用了之後重新實例事件:

event.preventDefault(); to disable the event. 


event.preventDefault = false;