web-dev-qa-db-ja.com

evt.preventDefault()の反対は何ですか。

evt.preventDefault()を実行した後、デフォルトのアクションを再開するにはどうすればよいですか?

149
Bryan

@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()
});
79
Grant Thomas
function(evt) {evt.preventDefault();}

そしてその反対

function(evt) {return true;}

乾杯!

51
foxybagga

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

または、単にpreventDefault();の後にwindow.location = this.href;を実行します

15
Bradley Flood
event.preventDefault(); //or event.returnValue = false;

そしてその反対(標準):

event.returnValue = true;

ソース: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue

8
user10625817

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 !

});
6
SNS Web

非同期呼び出しを実行するために、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();
    });
});
6
Bobby Pearson

次のパターンをお勧めします。

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/

4
karim79

「反対」はイベントをシミュレートすることだと思います。 .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');
2
Gary Green

これは私がそれを設定するために使用したものです:

$("body").on('touchmove', function(e){ 
    e.preventDefault(); 
});

元に戻すには:

$("body").unbind("touchmove");
2
Joe McLean

ここに便利なものがあります...

まず、リンクをクリックしてコードを実行し、デフォルトのアクションを実行します。これはevent.currentTargetを使用して可能になります。ここでは、新しいタブでGoogleにアクセスしてみますが、コードを実行する必要があります。

<a href="https://www.google.com.br" target="_blank" id="link">Google</a>

<script type="text/javascript">
    $(document).ready(function() {
        $("#link").click(function(e) {

            // Prevent default action
            e.preventDefault();

            // Here you'll put your code, what you want to execute before default action
            alert(123); 

            // Prevent infinite loop
            $(this).unbind('click');

            // Execute default action
            e.currentTarget.click();
        });
    });
</script>
2
Rafael Xavier

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

名前空間を使用すると、これらのイベントを複数追加し、ニーズに応じてそれらを削除できます..送信は最良の例ではないかもしれませんが、これはクリックやキー押下などに役立ちます。

1
honk31

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

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

var defaultEvent=evt.target;

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

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

ここでは解決策はありませんでしたが、状況を解決するためにこれを行いました。

<a onclick="return clickEvent(event);" href="/contact-us">

そして、関数clickEvent()

function clickEvent(event) {
    event.preventDefault();
    // do your thing here

    // remove the onclick event trigger and continue with the event
    event.target.parentElement.onclick = null;
    event.target.parentElement.click();
}
0
Raza

スクリプトのクリックイベントに添付されたこれをいつでも使用できます。

location.href = this.href;

使用例は次のとおりです。

jQuery('a').click(function(e) {
    location.href = this.href;
});
0
kkatusic