एक बार मुझे निकाल देने के बाद evt.preventDefault()
, मैं डिफ़ॉल्ट क्रियाओं को फिर से कैसे शुरू कर सकता हूँ?
एक बार मुझे निकाल देने के बाद evt.preventDefault()
, मैं डिफ़ॉल्ट क्रियाओं को फिर से कैसे शुरू कर सकता हूँ?
जवाबों:
@Prescott द्वारा टिप्पणी के अनुसार, इसके विपरीत:
evt.preventDefault();
हो सकता है:
अनिवार्य रूप से 'डिफॉल्ट' के बराबर , क्योंकि अब हम इसे रोक नहीं रहे हैं।
अन्यथा मैं आपको अन्य टिप्पणियों और उत्तरों द्वारा प्रदान किए गए उत्तरों की ओर संकेत करना चाहता हूं:
एक श्रोता को कैसे अनबाइंड करें जो ईवेंट कॉल कर रहा है ।preventDefault () (jQuery का उपयोग करके)?
कैसे reenable event.preventDefault?
ध्यान दें कि दूसरे को एक उदाहरण समाधान के साथ स्वीकार किया गया है, जिसे 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;}
चियर्स!
return true
: कुछ भी नहीं करेंगे।
click
JQuery में किसी ईवेंट से लिंक जारी रखने से पहले एक कमांड प्रोसेस करने के लिए :
उदाहरण के लिए: <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");
}
});
या बस के window.location = this.href;
बाद चलाते हैंpreventDefault();
मुझे एसिंक्रोनस कॉल को निष्पादित करने के लिए 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();
});
});
ठीक है ! यह क्लिक इवेंट के लिए काम करता है:
$("#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 !
});
event.preventDefault(); //or event.returnValue = false;
और इसके विपरीत (मानक):
event.returnValue = true;
स्रोत: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnVetue
मैं निम्नलिखित पैटर्न का सुझाव दूंगा:
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 के लिए कार्यक्षमता अनिवार्य रूप से रिटर्न को झूठा कह रही है जो आगे किसी भी निष्पादन को रोकती है। यदि आप जावास्क्रिप्ट के पुराने तरीकों से परिचित हैं, तो यह एक बार फैशन में था कि फॉर्म सबमिट्स और बटन पर चीजों को रद्द करने के लिए रिटर्न का उपयोग करें।
जैसा कि आप शायद पहले से ही ऊपर की सरल व्याख्या के आधार पर काम कर चुके हैं: 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);
ऊपर दिए गए कोड में आप देखेंगे कि अगर जाँच की जा रही है कि अनुमति दी गई है या नहीं। इसका मतलब है कि हम अपने फॉर्म का उपयोग करने से रोकेंगे event.preventDefault
और फिर हम कुछ सत्यापन तर्क करेंगे और यदि हम खुश हैं, तो अनुमति दें सत्य को स्वीकार करें।
यह वास्तव में इसके विपरीत करने का एकमात्र प्रभावी तरीका है event.preventDefault()
- आप घटनाओं को हटाने की भी कोशिश कर सकते हैं जो अनिवार्य रूप से एक ही चीज को प्राप्त करेगा।
यहां जानिए कुछ उपयोगी ...
सबसे पहले हम लिंक पर क्लिक करेंगे, कुछ कोड चलाएंगे, और हम डिफ़ॉल्ट कार्रवाई करेंगे। यह संभव होगा । 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>
किसी भी समाधान ने यहां मेरी मदद नहीं की और मैंने अपनी स्थिति को हल करने के लिए ऐसा किया।
<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();
}
मुझे लगता है कि "विपरीत" एक घटना का अनुकरण करना होगा। आप उपयोग कर सकते हैं.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 cancelled = !cb.dispatchEvent(evt);
if(cancelled) {
// A handler called preventDefault
alert("cancelled");
} else {
// None of the handlers called preventDefault
alert("not cancelled");
}
}
Ref: document.createEvent
jQuery के पास .trigger()
इसलिए कि आप तत्वों पर घटनाओं को ट्रिगर कर सकते हैं - कभी-कभी उपयोगी।
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
इस पर jquery () एक और समाधान हो सकता है। यह नाम स्थान के उपयोग की बात है जब escpacially ।
jquery ऑन () बाइंडिंग इवेंट्स (बाइंड () के बजाय) का वर्तमान तरीका है। बंद () इन unbind है। और जब आप एक नाम स्थान का उपयोग करते हैं, तो आप कई अलग-अलग घटनाओं को जोड़ और हटा सकते हैं।
$( 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 () को कॉल करते हैं क्योंकि यदि आप सभी मामलों के लिए preventDefault () कॉल करते हैं तो घटना होने का कोई मतलब नहीं है। यदि स्थिति और कॉलिंग रोफडफ़ॉल्ट () तभी हो जब स्थिति / संतुष्ट हो तो अन्य मामलों के लिए सामान्य तरीके से कार्य करेगा।
$('.btnEdit').click(function(e) {
var status = $(this).closest('tr').find('td').eq(3).html().trim();
var tripId = $(this).attr('tripId');
if (status == 'Completed') {
e.preventDefault();
alert("You can't edit completed reservations");
} else if (tripId != '') {
e.preventDefault();
alert("You can't edit a reservation which is already attached to a trip");
}
//else it will continue as usual
});
आप "preventDefault" विधि के बाद इसका उपयोग कर सकते हैं
// यहाँ evt.target वापसी डिफ़ॉल्ट ईवेंट (उदाहरण: डिफॉल्ट url आदि)
var defaultEvent=evt.target;
// यहां हम डिफ़ॉल्ट ईवेंट को सहेजते हैं ..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
इस कोड ने मेरे द्वारा उपयोग किए जाने के बाद घटना को फिर से प्रस्तुत करने के लिए काम किया:
event.preventDefault(); to disable the event.
event.preventDefault = false;
मैंने निम्नलिखित कोड का उपयोग किया है। यह मेरे लिए ठीक काम करता है।
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
;