一旦我触发了event . preventdefault(),我如何再次恢复默认操作?


当前回答

在一个同步流中,你只在需要的时候调用e.f preventdefault ():

a_link.addEventListener('click', (e) => {
   if( conditionFailed ) {
      e.preventDefault();
      // return;
   }

   // continue with default behaviour i.e redirect to href
});

在异步流中,你有很多方法,但最常见的是使用window.location:

a_link.addEventListener('click', (e) => {
     e.preventDefault(); // prevent default any way

     const self = this;

     call_returning_promise()
          .then(res => {
             if(res) {
               window.location.replace( self.href );
             }
          });
});

通过使用async-await,可以确保上述流是同步的

其他回答

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

它的反面

function(evt) {return true;}

干杯!

这里没有一个解决方案对我有帮助,我这样做是为了解决我的情况。

<a onclick="return clickEvent(event);" href="/contact-us">

函数clickEvent(),

function clickEvent(event) {
    event.preventDefault();
    // do your thing here

    // remove the onclick event trigger and continue with the event
    event.target.parentElement.onclick = null;
    event.target.parentElement.click();
}

这是我用来设置的:

$("body").on('touchmove', function(e){ 
    e.preventDefault(); 
});

要撤消它:

$("body").unbind("touchmove");

我建议采用以下模式:

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/

在一个同步流中,你只在需要的时候调用e.f preventdefault ():

a_link.addEventListener('click', (e) => {
   if( conditionFailed ) {
      e.preventDefault();
      // return;
   }

   // continue with default behaviour i.e redirect to href
});

在异步流中,你有很多方法,但最常见的是使用window.location:

a_link.addEventListener('click', (e) => {
     e.preventDefault(); // prevent default any way

     const self = this;

     call_returning_promise()
          .then(res => {
             if(res) {
               window.location.replace( self.href );
             }
          });
});

通过使用async-await,可以确保上述流是同步的