JS中event.preventDefault()取消默認事件能否還原?

event.preventDefault()是通知瀏覽器不要執行與事件關聯的默認動作。,比如document.addEventListener("touchmove", function (e) { e.preventDefault(); }, false);來阻止在手機上的滾動,但是阻止後還能再激活嗎?


document.addEventListener("touchmove", function (e) {

e.returnValue = true;

}, false);

親測好用,關鍵是可以放在不同事件當中也可以


在 touchstart 事件中綁定 touchmove

在 touchend 中解除 touchmove 綁定即可

$("#id").on(" touchstart",function(){

$("#id").on("touchmove",function(event) {

event.preventDefault();

}, false);

})

$("#id").on(" touchend",function(){

$("#id").unbind("touchmove");

})


用$("body").bind("touchmove",function(event){event.preventDefau

恢復這個拖動事件只要$("body").unbind("touchmove");

非常實用。


取消綁定事件,然後再重寫一個綁定事件

比如:

$("a").click(function() {event.preventDefault()}).off("click").click(function() {console.log("OK")});

依然可以打開新窗口。


var o = document.querySelector("a");

function fn(ev) {
ev.preventDefault();
}

//阻止默認行為
o.addEventListener("click",fn);

//取消阻止默認行為
o.removeEventListener("click",fn);

//這樣好像是可以的?


最近在做一個頁內工具,需要實現解綁/恢復頁內所有元素的點擊事件方法。總算嘗試出一種方法。

var events_b = $._data($("#id")[0],"events"); //儲存
$._data($("#id")[0],"events",{}); //解綁
$._data($("#id")[0],"events",events_b); //恢復

注意不要用原生的unbind()解綁,會無法恢復。

此法適用於包括默認方法和自定義方法在內的所有方法。

在jquery1.8以上有效。


貌似無法還原本來的默認事件,只能重新綁定事件了


$("#id").on("touchmove",function(event) { event.preventDefault(); }, false);

$("#id").unbind("touchmove");


document.addEventListener("touchmove", function(e){bodyScroll(e)}, false);這樣就可以了


推薦閱讀:

這兩個js有衝突嗎?
svg 和 canvas在移動端的兼容性如何?尤其是在動畫方面。謝謝!?
vw相比rem,在實際開發中究竟有多大區別?
如何快速開發多端應用?
Qt 5.7使用QWebEngine載入html做UI,但運行庫卻近70M,如何能減少體積?

TAG:前端開發 | JavaScript | HTML5 | jQuery | 網頁應用 |