什么是evt.preventDefault()相反;
一旦我解雇了evt.preventDefault()
,我怎么能再次恢复默认操作?
根据@Prescott的评论,与之相反的是:
evt.preventDefault();
可能:
基本上等同于“默认” ,因为我们不再阻止它。
否则,我倾向于指出你提供的答案,由另一个评论和答案:
如何解除调用event.preventDefault()(使用jQuery)的侦听器?
如何重新启用event.preventDefault?
请注意,第二个已被接受与一个示例解决scheme,由红色方块(这里发布的直接解决scheme,以防止这种情况下,重复):
$('form').submit( function(ev) { ev.preventDefault(); //later you decide you want to submit $(this).unbind('submit').submit() });
function(e){ e.preventDefault();
和它的对面
function(e){ return true; }
干杯!
在继续从jQuery中的click
事件的链接之前处理命令:
例如: <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();
我会build议以下模式:
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>
…除非我失去了一些东西。
我不得不在jQuery中延迟表单提交以执行asynchronous调用。 这是简化的代码
$("$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(); }); });
好 ! 它适用于点击事件:
$("#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 ! });
我把这个“相反”的东西模拟成一个事件。 你可以使用.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');
我已经使用了下面的代码。 它对我来说工作正常。
$('a').bind('click', function(e) { e.stopPropagation(); });
()上的 jquery可能是另一个解决scheme。 特别是当涉及到命名空间的使用时。
jquery on()只是绑定事件的当前方式(而不是bind())。 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"); } });
现在使用命名空间,你可以添加多个这些事件,并能够删除这些,这取决于您的需求..虽然提交可能不是最好的例子,这可能会派上用场,点击或按键或任何..
你可以在“preventDefault”方法后使用这个
//这里evt.target返回默认事件(例如:defult url等)
var defaultEvent=evt.target;
//这里我们保存默认事件..
if("true") { //activate default event.. location.href(defaultEvent); }