215

を起動したらevt.preventDefault()、どうすればデフォルトのアクションを再開できますか?

4

19 に答える 19

100

@Prescott のコメントによると、次の反対です。

evt.preventDefault();

になり得る:

本質的には'do default'と同等です。これはもはや防止していないためです。

それ以外の場合は、別のコメントと回答によって提供される回答を参照する傾向があります。

event.preventDefault() を呼び出しているリスナーのバインドを解除する方法 (jQuery を使用)?

event.preventDefault を再度有効にする方法は?

2番目のものは、redsquareによって与えられたソリューションの例で受け入れられていることに注意してください(これが重複として閉じられていない場合の直接的なソリューションのためにここに投稿されています):

$('form').submit( function(ev) {
     ev.preventDefault();
     //later you decide you want to submit
     $(this).unbind('submit').submit()
});
于 2011-04-13T15:47:27.293 に答える
55
function(evt) {evt.preventDefault();}

とその反対

function(evt) {return true;}

乾杯!

于 2011-11-19T17:48:48.410 に答える
11

わかった !クリックイベントで機能します:

$("#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 !

});
于 2016-07-28T00:03:37.290 に答える
8

非同期呼び出しを実行するために、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();
    });
});
于 2013-04-05T04:46:56.083 に答える
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/

于 2011-04-13T15:50:33.203 に答える
4

なぜ最初に呼び出すときevent.preventDefault()に何が行われるのかを調べなければならない理由を理解するための逆の方法はありません。event.preventDefault()

内部では、preventDefault の機能は基本的に、それ以上の実行を停止する return false を呼び出しています。Javascript の古い方法に精通している場合、(jQuery が登場する前に) return true を使用して、フォーム送信やボタンなどのイベントをキャンセルするために return false を使用することが流行していました。

上記の簡単な説明に基づいて、おそらくすでに解決しているかもしれませんが、の反対はevent.preventDefault()無です。イベントを防がないだけです。デフォルトでは、防いでいない場合、ブラウザはイベントを許可します。

説明については、以下を参照してください。

;(function($, window, document, undefined)) {

    $(function() {
        // By default deny the submit
        var allowSubmit = false;

        $("#someform").on("submit", function(event) {

            if (!allowSubmit) {
                event.preventDefault();

                // Your code logic in here (maybe form validation or something)
                // Then you set allowSubmit to true so this code is bypassed

                allowSubmit = true;
            }

        });
    });

})(jQuery, window, document);

上記のコードでは、allowSubmit が false かどうかをチェックしていることに気付くでしょう。これは、使用してフォームが送信されevent.preventDefaultないようにし、いくつかの検証ロジックを実行して、問題がなければ allowSubmit を true に設定することを意味します。

これは逆のことを行う唯一の効果的な方法event.preventDefault()です。基本的に同じことを達成するイベントを削除することもできます。

于 2018-06-01T10:39:13.200 に答える
3

「反対」は、イベントをシミュレートすることだと思います。あなたが使用することができます.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');
于 2011-04-13T15:45:47.040 に答える
1

jquery on()は、これに対する別の解決策になる可能性があります。特に名前空間の使用に関しては。

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

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

于 2017-07-04T15:38:44.410 に答える
0

「preventDefault」メソッドの後にこれを使用できます

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

var defaultEvent=evt.target;

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

if("true")
{
//activate default event..
location.href(defaultEvent);
}
于 2014-06-09T07:06:18.940 に答える
-2

次のコードを使用しました。それは私にとってはうまくいきます。

$('a').bind('click', function(e) {
  e.stopPropagation();
});
于 2014-07-10T04:48:50.667 に答える