evt.preventDefault()
を実行した後、デフォルトのアクションを再開するにはどうすればよいですか?
@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;}
乾杯!
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;
を実行します
event.preventDefault(); //or event.returnValue = false;
そしてその反対(標準):
event.returnValue = true;
ソース: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
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 !
});
非同期呼び出しを実行するために、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>
...何かが足りない限り。
「反対」はイベントをシミュレートすることだと思います。 .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');
これは私がそれを設定するために使用したものです:
$("body").on('touchmove', function(e){
e.preventDefault();
});
元に戻すには:
$("body").unbind("touchmove");
ここに便利なものがあります...
まず、リンクをクリックしてコードを実行し、デフォルトのアクションを実行します。これは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>
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");
}
});
名前空間を使用すると、これらのイベントを複数追加し、ニーズに応じてそれらを削除できます..送信は最良の例ではないかもしれませんが、これはクリックやキー押下などに役立ちます。
「preventDefault」メソッドの後にこれを使用できます
//ここでevt.targetはデフォルトのイベントを返します(例:defult urlなど)
var defaultEvent=evt.target;
//ここでデフォルトイベントを保存します..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
ここでは解決策はありませんでしたが、状況を解決するためにこれを行いました。
<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();
}
スクリプトのクリックイベントに添付されたこれをいつでも使用できます。
location.href = this.href;
使用例は次のとおりです。
jQuery('a').click(function(e) {
location.href = this.href;
});