2009-07-22 17 views
56

मेरे पास एक वेब पेज है जिसे मैंने सभी सबमिट बटनों पर डिफ़ॉल्ट कार्रवाई को रोक दिया है, हालांकि मैं बटन पर डिफ़ॉल्ट सबमिट कार्रवाई को फिर से सक्षम करना चाहता हूं, मैं यह कैसे कर सकता हूं?event.preventDefault को पुन: सक्षम कैसे करें?

मैं वर्तमान में उपयोग कर डिफ़ॉल्ट कार्रवाई को रोकने कर रहा हूँ निम्नलिखित:

$("form").bind("submit", function(e){ 
e.preventDefault(); 
}); 

मैं सफलतापूर्वक निम्नलिखित का उपयोग कर यह किया है:

$(document).ready(function(){ 
$("form:not('#press')").bind("submit", function(e){ 
e.preventDefault(); 
}); 

लेकिन मैं गतिशील रूप से यह कर सकते हैं जब बटन क्लिक किया जाता है?

+0

संभावित डुप्लिकेट [event.preventDefault() के बाद डिफ़ॉल्ट कैसे सक्षम करें?] (Http://stackoverflow.com/questions/1551389/how-to-enable-default-after-event-preventdefault) –

उत्तर

104

आपको ईवेंट को अनबिंड करना होगा और या तो एक अलग ईवेंट पर पुनर्विचार करना होगा जो डिफॉल्ट को रोकता नहीं है या अनइंडिंग के बाद विधि में बाद में डिफ़ॉल्ट ईवेंट को कॉल करता है। कोई जादुई घटना.cancelled = झूठी नहीं है;

अनुरोध

$('form').submit(function(ev){ 

     ev.preventDefault(); 

     //later you decide you want to submit 
     $(this).unbind('submit').submit() 

    }); 
+0

आपके लिए धन्यवाद जवाब, क्या आप मुझे ऐसा करने का उदाहरण दे सकते हैं। – Richbits

+0

धन्यवाद, सोचा कि मैंने कोशिश की थी, लेकिन स्पष्ट रूप से नहीं। – Richbits

+3

करने के लिए सबसे अच्छी चीजों में से एक है केवल सशर्त के आधार पर, जब आप की जरूरत है, तो रोकें Default() को कॉल करें। हालांकि, यह वर्णन करने का एकमात्र असली तरीका है जो आपने वर्णित किया है, मैं आपको यह सत्यापित करने के लिए प्रोत्साहित करता हूं कि यह आपकी समस्या का सबसे अच्छा समाधान है। :) – Swivel

12

या तो आप क्या redsquare इस कोड के साथ का प्रस्ताव करते हैं:

function preventDefault(e) { 
    e.preventDefault(); 
} 
$("form").bind("submit", preventDefault); 

// later, now switching back 
$("form#foo").unbind("submit", preventDefault); 

या आप एक रूप विशेषता जब भी प्रस्तुत करने की अनुमति दी है आवंटित। कुछ इस तरह:

function preventDefault(e) { 
    if (event.currentTarget.allowDefault) { 
     return; 
    } 
    e.preventDefault(); 
} 
$("form").bind("submit", preventDefault); 

// later, now allowing submissions on the form 
$("form#foo").get(0).allowDefault = true; 
+0

Awewsome सरल समाधान! इसने लोचदार शरीर स्क्रॉलिंग के लिए आईओएस डिफ़ॉल्ट व्यवहार को चालू/बंद करने और कुछ तत्वों को स्क्रॉल करने योग्य रखने की मेरी समस्या का हल किया। ठंडा! – Garavani

1
$('form').submit(function(e){ 

    e.preventDefault(); 

    //later you decide you want to submit 
    $(this).trigger('submit');  or  $(this).trigger('anyEvent'); 
+3

टाइपो 'ev' बनाम' ई' और '$ (यह) .trigger ('submit') 'यहां' e.preventDefault()' में चलाया जाएगा। यह बुरा जवाब है। –

+0

@ i-- धन्यवाद! मैंने इसे ठीक किया, यह एक टाइपो – adardesign

1
function(e){ e.preventDefault(); 

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

function(e){ return true; } 

चियर्स!

+0

एक समस्या थी, जो कि यदि आप जो भी करना चाहते हैं वह बहुत लंबा लगता है (उदाहरण के लिए, अजाक्स कॉल करें) तो आप कभी भी "वापसी झूठी" या "e.preventDefault()" तक नहीं पहुंच सकते हैं यदि आप इसे सशर्त के बाद रखो। – Casey

-3

आप कर सकते हैं कार्यों

this.delegateEvents(); // Re-activates the events for all the buttons 

जोड़कर आप एक रीढ़ js देखने का समारोह प्रस्तुत करने के लिए तो उसे जोड़ने के फिर से सक्रिय है, तो आप event.preventDefault() के रूप में आवश्यक उपयोग कर सकते हैं।

0
async कार्यों के साथ

(टाइमर, ajax) आप इस तरह संपत्ति isDefaultPrevented ओवरराइड कर सकते हैं:

$('a').click(function(evt){ 
    e.preventDefault(); 

    // in async handler (ajax/timer) do these actions: 
    setTimeout(function(){ 
    // override prevented flag to prevent jquery from discarding event 
    evt.isDefaultPrevented = function(){ return false; } 
    // retrigger with the exactly same event data 
    $(this).trigger(evt); 
    }, 1000); 
} 

यह बिल्कुल वैसा ही डेटा के साथ घटना retriggering का सबसे पूरा तरीका है।

संबंधित मुद्दे