を起動したらevt.preventDefault()
、どうすればデフォルトのアクションを再開できますか?
19 に答える
@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()
});
function(evt) {evt.preventDefault();}
とその反対
function(evt) {return true;}
乾杯!
わかった !クリックイベントで機能します:
$("#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 !
});
非同期呼び出しを実行するために、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();
});
});
次のパターンをお勧めします。
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>
...何かが欠けていない限り。
なぜ最初に呼び出すとき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()
です。基本的に同じことを達成するイベントを削除することもできます。
「反対」は、イベントをシミュレートすることだと思います。あなたが使用することができます.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");
}
}
jQuery には.trigger()
要素のイベントをトリガーできる機能があり、便利な場合もあります。
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
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");
}
});
名前空間を使用すると、必要に応じてこれらのイベントを複数追加したり、それらを削除したりできます.送信は最良の例ではないかもしれませんが、これはクリックやキープレスなどで便利になる可能性があります..
「preventDefault」メソッドの後にこれを使用できます
// ここで evt.target はデフォルトのイベントを返します (例: デフォルトの URL など)
var defaultEvent=evt.target;
//ここでデフォルトのイベントを保存します..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
次のコードを使用しました。それは私にとってはうまくいきます。
$('a').bind('click', function(e) {
e.stopPropagation();
});