2011-04-13 209 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; 
相关问题