一旦我触发了event . 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 cancelled = !cb.dispatchEvent(evt);
  if(cancelled) {
    // A handler called preventDefault
    alert("cancelled");
  } else {
    // None of the handlers called preventDefault
    alert("not cancelled");
  }
}

裁判:document.createEvent


jQuery有.trigger(),因此可以触发元素上的事件——有时很有用。

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

$('#foo').trigger('click');

其他回答

event.preventDefault(); //or event.returnValue = false;

及其反义词(标准):

event.returnValue = true;

来源: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue

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

它的反面

function(evt) {return true;}

干杯!

为了执行异步调用,我不得不在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();
    });
});

正如@Prescott所评论的,相反的是:

evt.preventDefault();

可能是:

本质上等同于'做违约',因为我们不再阻止它。

否则,我倾向于让你看看其他评论和答案提供的答案:

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

如何重新启用event.preventDefault?

请注意,第二个已经接受了一个由redsquare给出的示例解决方案(在这里发布了一个直接解决方案,以防这不是封闭的重复):

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

好的!它适用于点击事件:

$("#submit").click(function(event){ 
  
   event.preventDefault();

  // -> block the click of the sumbit ... do what you want

  // the html click submit work now !
  $("#submit").unbind('click').click(); 

});