一旦我解僱了evt.preventDefault()
,我該如何恢復默認操作?與evt.preventDefault()相反的是什麼?
回答
我提出「相反」將模擬一個事件。你可以使用.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");
}
}
的jQuery已經.trigger()
這樣你就可以觸發事件的元素 - 有時是有用的。
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
按照評論說@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()
});
這一個完美解決了我的問題。感謝您提供該片段! – 2016-02-03 13:03:31
謝謝!在這個問題上我正在摸索一段時間(我需要在提交表單之前停止並檢查一些內容,而不是在某些情況下提交,並在其他情況下提交)。 – 2018-02-19 19:00:25
我會建議以下模式:
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>
......除非我失去了一些東西。
function(evt) {evt.preventDefault();}
和與其相對
function(evt) {return true;}
喝彩!
這對我有效,但我想知道是否有人可以更好地解釋它爲什麼? – edhedges 2013-05-16 13:18:52
這不會撤消preventDefault(),事實上它的作用與您會忽略'return true'一樣:什麼也不做。 – brannigan 2017-05-15 09:37:34
不起作用了。 ! – yogihosting 2017-08-01 11:55:33
我不得不在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();
});
});
此場景中的另一個選項可能是使用input type =「button」並綁定到click事件,而不是使用input type =「submit」並綁定到提交事件。 – Strixy 2013-06-19 18:54:24
後就可以 「的preventDefault」 方法使用該
//這裏evt.target返回默認的事件(例如:defult網址等)
var defaultEvent=evt.target;
//我們保存默認事件..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
要處理一個命令之前繼續從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();
沒錯,但是這裏假定preventDefault是一個鏈接,並且不會在文檔主體上表示touchmove。 – Bangkokian 2015-09-06 10:51:04
這不是問題所在。 – 2016-09-21 12:56:49
我已經使用了下面的代碼。這對我來說可以。
$('a').bind('click', function(e) {
e.stopPropagation();
});
[如jQuery API文檔中所述](http://api.jquery.com/event.stoppropagation/),這可以防止事件冒泡DOM樹,從而阻止任何父處理程序被通知事件。這不同於/ event.preventDefault()'; – 2015-01-20 14:53:30
這不是問題的問題。 – 2016-09-21 12:57:02
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 !
});
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");
}
});
現在使用的命名空間,你可以添加這些事件的多,並能消除那些,根據您的需要。雖然提交可能不是最好的例子,這可能會派上用場上單擊或按鍵或任何..
您可以隨時使用這個連接在你的腳本中一些單擊事件:
location.href = this.href;
例子用法是:
jQuery('a').click(function(e) {
location.href = this.href;
});
此代碼工作對我來說,我用了之後重新實例事件:
event.preventDefault(); to disable the event.
event.preventDefault = false;
- 1. 與void標籤相反的是什麼?
- 2. 與hasFields相反的是什麼?
- 3. OnSetActive()的「相反」是什麼?
- 4. CoCreateInstance - 什麼是相反的?
- 5. 什麼是BatchBlock相反塊
- 6. Ruby的包括什麼是相反的?
- 7. 「格式」的相反之處是什麼?
- 8. 「git add」的相反命令是什麼?
- 9. SelectMany的相反之處是什麼?
- 10. ETL的相反之處是什麼?
- 11. now.date.addDays的相反之處是什麼?
- 12. Notepad ++:什麼是JSFormat的「相反」格式?
- 13. jQuery`.get()`的相反之處是什麼?
- 14. 什麼是相反的JavaScript匹配()
- 15. 「Parser」的相反詞是什麼?
- 16. MATCH AGAINST的相反情況是什麼?
- 17. 202接受的相反是什麼?
- 18. 繼承的相反部分是什麼?
- 19. TDD的相反之處是什麼?
- 20. tesselation的相反之處是什麼?
- 21. forceActiveFocus的相反之處是什麼?
- 22. 與C#中的加密+壓縮代碼相反的是什麼?
- 23. 與[sender resignFirstResponder]相反的是什麼? Objective-C的
- 24. 查詢生成器與()相反的是什麼?
- 25. 函數的名稱是什麼,它與HttpUtility.JavaScriptStringEncode相反?
- 26. 與.match()在jQuery中相反的是什麼
- 27. 與ChannelFactory相反的是什麼?<TChannel> .CreateChannel?
- 28. 與indexof()相反的javascript函數是什麼?
- 29. 與符號計算相反的是什麼?
- 30. 與TypeScript反應:什麼類型是render()?
我覺得一般的功能將運行,然後默認行爲將運行,所以你永遠不會調用evt.preventDefault()在第一個地方 – Prescott 2011-04-13 15:44:19
你能給我們一個你想要做什麼的例子嗎? – 2011-04-13 15:45:56
可能重複? :http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault – Nobita 2011-04-13 15:47:09