2011-04-13 41 views
107

evt.preventDefault()が解消されたら、どのようにデフォルトのアクションを再開できますか?evt.preventDefault()の反対は何ですか?

+3

を、私はあなたがevt.preventDefault(呼び出すことはないので、一般的に、あなたの関数が実行されますと、デフォルトの動作が実行さだと思います)最初は – Prescott

+0

あなたがしようとしていることの例を教えてもらえますか? –

+1

可能な重複はありますか? :http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault – Nobita

答えて

2

私は "反対"はイベントをシミュレートすることになるでしょう。あなたは、Mozillaの例に従え.createEvent()

を使用することができます。

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()ので、あなたは要素のイベントをトリガすることができている - 時々便利に。 @Prescottでコメントを1として

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

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

、の反対:

evt.preventDefault(); 

は次のようになります。基本的にに等しくする

私たちは「以来、 'デフォルトを行います'もはやそれを防ぐことはできません。

そうでなければ、私は他のコメントと回答が提供する答えにあなたを指すように傾いている:秒1は、例えば、溶液で受け入れられたことを

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

これは私の問題を完全に解決しました。そのスニペットをお寄せいただきありがとうございます! –

+0

ありがとうございます!しばらく私の頭を傷つけていた(私は、フォームを提出する前にいくつかのことをやめてチェックし、特定の状況では提出せず、他人に提出する必要があった)。 –

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

+0

これはpreventDefault()を取り消しません。実際には 'return true'を除いて同じことをします:何もしません。 – brannigan

+0

はもう動作しません。 !!! – yogihosting

5

非同期呼び出しを実行するために、jQueryでフォームの送信を遅らせる必要がありました。ここでは単純化されたコードです...あなたは "のpreventDefault" メソッドの後にこれを使用することができます

$("$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"を使用し、input type = "submit"を使用せずにsubmitイベントにバインドする代わりにclickイベントにバインドする方法もあります。 – Strixy

0

//ここではデフォルトのイベントを返すevt.target(例:defult URLなど)

var defaultEvent=evt.target; 

//デフォルトのイベントを保存します。

例::<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"); 
    } 
}); 

それとも単に実行をjQueryのでclickイベントからリンクを継続する前に、コマンドを処理するために

if("true") 
{ 
//activate default event.. 
location.href(defaultEvent); 
} 
13

preventDefault();の後のwindow.location = this.href;

+1

右ですが、これはpreventDefaultがリンクであり、文書本体のtouchmoveとは言わないと仮定しています。 – Bangkokian

+0

これは質問が尋ねたことではありません。 –

-1

私は次のコードを使用しました。それは私のためにうまく動作します。

$('a').bind('click', function(e) { 
    e.stopPropagation(); 
}); 
+1

[jQuery APIのドキュメントで説明されているように](http://api.jquery.com/event.stoppropagation/)、これによりイベントがDOMツリーをバブリングするのを防ぎ、親ハンドラにイベントが通知されないようにします。これは 'event.preventDefault()'と同じではありません。 –

+1

これは質問にも聞いたことではありません。 –

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の使用になったときにはエスピカシティーになります。

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"); 
    } 
}); 

今の名前空間を使用して、あなたはこれらのイベントの複数を追加し、最良の例をではないかもしれません提出しながら..あなたのニーズに応じて、それらを削除することができます可能性があり、これは上便利になるかもしれませんキープレスまたは何かをクリックします。..

0

あなたはいつも、これはあなたのスクリプトでいくつかのクリックイベントにアタッチ使用することができます。

location.href = this.href; 

使い方の例は次のとおりです。

jQuery('a').click(function(e) { 
    location.href = this.href; 
}); 
私が使用した後
1

このコードは再インスタンス化イベントに私の仕事:

event.preventDefault(); to disable the event. 


event.preventDefault = false;