Evt.preventDefault () के विपरीत क्या है;


184

एक बार मुझे निकाल देने के बाद evt.preventDefault(), मैं डिफ़ॉल्ट क्रियाओं को फिर से कैसे शुरू कर सकता हूँ?


3
मुझे लगता है कि आम तौर पर आपका कार्य चलेगा और फिर डिफ़ॉल्ट व्यवहार चलेगा, इसलिए आप पहले कभी भी evt.preventDefault () कॉल नहीं करेंगे
Prescott

1
संभव डुप्लिकेट? : stackoverflow.com/questions/1551389/…
नोबिता

2
@ नोबिता - मुझे इतना यकीन नहीं है ... जो कि jQuery के लिए विशिष्ट है।
gilly3

1
वाह, त्वरित प्रतिक्रियाओं के लिए thanx! हालांकि मेरी समस्या यह है कि मैं evt.preventDefault (); मैं एक lightbox में 3rd पार्टी फ्लैश एप्लिकेशन चला रहा हूं। जब मैं लाइटबॉक्स को बंद करता हूं, तो किसी तरह पेज स्क्रॉलिंग के लिए मेरी मूसवेल बंद हो जाती है। कुछ शोध करने में, मैंने पाया कि यह फ्लैश ऐप ज़ूम फीचर के कारण पेज स्क्रॉलिंग को अक्षम कर देता है। इसलिए अब मैं ऐप को बंद करने के बाद पेज स्क्रॉलिंग को फिर से शुरू करने की कोशिश कर रहा हूं। शायद कुछ विधि है जिसे मैं माउस व्हील इवेंट को फिर से शुरू करने के लिए कह सकता हूं?
ब्रायन

जवाबों:


90

@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()
});

1
इसने मेरी समस्या को पूरी तरह हल कर दिया। कि स्निपेट प्रदान करने के लिए धन्यवाद!
जॉर्डन डेविडसन

धन्यवाद! इस पर थोड़ी देर के लिए मेरे सिर को खरोंच रहा था (मुझे फॉर्म सबमिट करने से पहले कुछ चीजों को रोकने और जांचने की ज़रूरत थी, कुछ परिस्थितियों में जमा नहीं करना, दूसरों में जमा करना)।
कैथरीन ओसबोर्न

1
यह काम करता है, लेकिन मुझे समझ में नहीं आता है कि अगला फ़ॉर्म फिर से फ़ंक्शन को कॉल क्यों सबमिट करता है, मैंने सोचा कि यह निश्चित रूप से इसे unbind करेगा, लेकिन ऐसा लगता है कि यह केवल वर्तमान कॉल के लिए unbind है ... मैं इसे समझा नहीं सकता, यह करता है वास्तव में मैं क्या चाहता हूं, लेकिन यह वह नहीं है जिसकी मैंने उम्मीद की थी।
वडकोरक्वेस्ट

1
एक चतुर और त्वरित समाधान। इसे प्यार करें :)
ahmednawazbutt

53
function(evt) {evt.preventDefault();}

और इसके विपरीत

function(evt) {return true;}

चियर्स!


8
यह मेरे लिए काम करता है, लेकिन मैं सोच रहा हूं कि क्या कोई इसे थोड़ा बेहतर समझा सकता है क्यों?
एडेड

11
यह पूर्व-निक्षेपण () को पूर्ववत नहीं करता है, वास्तव में यह वैसा ही होता है जैसे कि आप return true: कुछ भी नहीं करेंगे।
br4nnigan

19

clickJQuery में किसी ईवेंट से लिंक जारी रखने से पहले एक कमांड प्रोसेस करने के लिए :

उदाहरण के लिए: <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();


3
सही है, लेकिन यह मानता है कि preventDefault एक लिंक है, और दस्तावेज़ निकाय पर टचमॉव न कहें।
बैंकाकियन

4
यह वही नहीं है जो सवाल पूछा गया था।
मैट फ्लेचर 12

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

इस परिदृश्य में एक अन्य विकल्प इनपुट प्रकार = "बटन" का उपयोग करना हो सकता है और इनपुट प्रकार = "सबमिट" का उपयोग करने और सबमिट करने के लिए बाइंड करने के बजाय क्लिक इवेंट पर बाइंड करना है।
18

8

ठीक है ! यह क्लिक इवेंट के लिए काम करता है:

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

});


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/


4

यह 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()- आप घटनाओं को हटाने की भी कोशिश कर सकते हैं जो अनिवार्य रूप से एक ही चीज को प्राप्त करेगा।


4

यहां जानिए कुछ उपयोगी ...

सबसे पहले हम लिंक पर क्लिक करेंगे, कुछ कोड चलाएंगे, और हम डिफ़ॉल्ट कार्रवाई करेंगे। यह संभव होगा । 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

इसे मैंने इसे सेट करने के लिए उपयोग किया है:

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

और इसे पूर्ववत करने के लिए:

$("body").unbind("touchmove");

2

किसी भी समाधान ने यहां मेरी मदद नहीं की और मैंने अपनी स्थिति को हल करने के लिए ऐसा किया।

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

2

मुझे लगता है कि "विपरीत" एक घटना का अनुकरण करना होगा। आप उपयोग कर सकते हैं.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');

1

इस पर 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");
    }
});

अब नाम स्थान के उपयोग के साथ, आप इनमें से कई ईवेंट जोड़ सकते हैं और अपनी आवश्यकताओं के आधार पर, इन्हें हटा सकते हैं .. जबकि सबमिट करना सबसे अच्छा उदाहरण नहीं हो सकता है, यह एक क्लिक या कीपर या कुछ भी काम में आ सकता है ..


1

यह सवाल का सीधा जवाब नहीं है लेकिन यह किसी की मदद कर सकता है। मेरा कहना है कि आप केवल कुछ स्थितियों के आधार पर 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

});


0

आप "preventDefault" विधि के बाद इसका उपयोग कर सकते हैं

// यहाँ evt.target वापसी डिफ़ॉल्ट ईवेंट (उदाहरण: डिफॉल्ट url आदि)

var defaultEvent=evt.target;

// यहां हम डिफ़ॉल्ट ईवेंट को सहेजते हैं ..

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

0

आप हमेशा अपनी स्क्रिप्ट में कुछ क्लिक ईवेंट से जुड़ी इस का उपयोग कर सकते हैं:

location.href = this.href;

उपयोग का उदाहरण है:

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

-1

इस कोड ने मेरे द्वारा उपयोग किए जाने के बाद घटना को फिर से प्रस्तुत करने के लिए काम किया:

event.preventDefault(); to disable the event.


event.preventDefault = false;

-2

मैंने निम्नलिखित कोड का उपयोग किया है। यह मेरे लिए ठीक काम करता है।

$('a').bind('click', function(e) {
  e.stopPropagation();
});

2
जैसा कि jQuery एपीआई प्रलेखन में समझाया गया है , यह ईवेंट को DOM ट्री को बुदबुदाने से रोकता है, किसी भी माता-पिता के हैंडलर को घटना की सूचना देने से रोकता है। वह / या के विपरीत नहीं है event.preventDefault();
ᴍᴀᴛᴛ ᴍᴀᴛᴛ

2
यह वही नहीं है जो सवाल पूछा गया था।
मैट फ्लेचर 12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.