2012-05-23 20 views
17

मैंने एक वेबपृष्ठ लिखा जहां उपयोगकर्ता डेटाबेस पर संग्रहीत लॉग प्रविष्टि दर्ज कर सकता है और फिर ajax का उपयोग करके पृष्ठ पर पुनर्प्राप्त और मुद्रित किया जा सकता है। मैं अभी भी ajax पर काफी नया हूं और सोच रहा था कि कोई मुझे बता सकता है कि return false; मेरे कोड के अंत में क्या करता है? और यह भी जरूरी है?"झूठी वापसी" क्या करता है; कर?

यदि मैं return false के बाद दूसरा AJAX कोड डालता हूं तो कोड काम नहीं करता है! क्या आप कृपया मुझे समझा सकते हैं क्यों?

//handles submitting the form without reloading page 
$('#FormSubmit').submit(function(e) { 
    //stores the input of today's data 
    var log_entry = $("#LogEntry").val(); 
    // prevent the form from submitting normally 
    e.preventDefault(); 

    $.ajax({ 
     type: 'POST', 
     url: 'behind_curtains.php', 
     data: { 
      logentry: log_entry 
     }, 
     success: function() { 
      alert(log_entry); 
      //clears textbox after submission 
      $('#LogEntry').val(""); 
      //presents successs text and then fades it out 
      $("#entered-log-success").html("Your Entry has been entered."); 
      $("#entered-log-success").show().fadeOut(3000); 
     } 
    }); 
    //prints new log entries on page upon submittion 
    $.ajax({ 
     type: 'POST', 
     url: '/wp-content/themes/childOfFanwood/traininglog_behind_curtains.php', 
     data: { 
      log_entries_loop: "true" 
     }, 
     success: function(data) { 
      alert(data); 
      $("#log-entry-container").html(""); 
      $("#log-entry-container").html(data); 
     } 
    }); 
    return false; 
}); 
​ 
+0

डिफ़ॉल्ट फ़ॉर्म सबमिट करने से रोकता है –

+0

@Dagon। इतना ही नहीं। वास्तविक प्रश्न का उत्तर देने के लिए – gdoron

उत्तर

35

क्या मैं यहाँ लिखेंगे jQuery घटनाओं,
वेनिला जावास्क्रिप्ट घटनाओं @ T.J पढ़ लिए लागू होती है। जवाब


return false एक कॉलबैक अंदर के तल पर Crowder टिप्पणी डिफ़ॉल्ट व्यवहार से बचाता है। उदाहरण के लिए, submit ईवेंट में, यह फ़ॉर्म सबमिट नहीं करता है।

return false भी बुलबुला बंद कर देता है, इसलिए तत्व के माता-पिता घटना को नहीं जान पाएंगे।

return falseevent.preventDefault() + event.stopPropagation()

और निश्चित रूप से, सभी कोड के बाद return xxx लाइन निष्पादित नहीं किया जाएगा मौजूद है के बराबर है। (सभी प्रोग्रामिंग भाषाओं के साथ के रूप में मैं जानता हूँ कि)

हो सकता है कि आप पाते हैं यह उपयोगी:

:
Stop event bubbling - increases performance?


एक "असली" डेमो return false और event.preventDefault() के बीच अंतर समझाने के लिए मार्कअप:

<div id="theDiv"> 
    <form id="theForm" > 
     <input type="submit" value="submit"/> 
    </form> 
</div>​ 

जावास्क्रिप्ट:

$('#theDiv').submit(function() { 
    alert('DIV!'); 
}); 
$('#theForm').submit(function(e) { 
    alert('FORM!'); 
    e.preventDefault(); 
});​ 

अब ... जब उपयोगकर्ता फ़ॉर्म सबमिट, पहले हैंडलर प्रपत्र सबमिट किया जाता है, जो preventDefault() -> फ़ॉर्म सबमिट नहीं किया जाएगा, लेकिन इस घटना के लिए बुलबुले div, ट्रिगरिंग यह हैंडलर सबमिट करें।

Live DEMO

अब, अगर प्रपत्र सबमिट के हैंडलर रद्द करना चाहते return false साथ बुदबुदाती:

$('#theDiv').submit(function() { 
    alert('DIV!'); 
}); 
$('#theForm').submit(function(event) { 
    alert('FORM!'); 
    return false; 
    // Or: 
    event.preventDefault(); 
    event.stopPropagation(); 
});​ 

div भी नहीं पता होता कि किसी फ़ॉर्म सबमिशन था।

Live DEMO


क्या return false वेनिला में क्या करता है जावास्क्रिप्ट घटनाओं एक Dom2 हैंडलर (addEventListener) से

वापसी झूठी सब पर कुछ नहीं करता है (न तो डिफ़ॉल्ट से बचाता है और न ही बुदबुदाती बंद हो जाता है; एक Microsoft DOM2-ish हैंडलर (attachEvent) से, यह डिफॉल्ट को रोकता है लेकिन बुलबुला नहीं; एक DOM0 हैंडलर (onclick="return ...") से, यह डिफ़ॉल्ट को रोकता है (बशर्ते आप विशेषता में वापसी शामिल करें) लेकिन बुलबुला नहीं; एक jQuery घटना हैंडलर से, यह दोनों करता है, क्योंकि यह एक jQuery चीज है। विवरण और लाइव परीक्षण यहां - टीजे। Crowder

+1

+1, यहां तक ​​कि एक बाद के विचार के रूप में –

+0

+1 हाँ, मैं 'स्टॉपप्रॉपैगेशन' के बारे में लिखने वाला था लेकिन देखा कि आपने पहले ही इसका उल्लेख किया है :) – VisioN

+0

क्या इसका मतलब है कि आपके पास 'e.preventDefault() है ; 'आपको झूठी वापसी की जरूरत नहीं है,' अगर वे दोनों एक ही काम करते हैं? – Nope

2

इस उदाहरण में, return false; डिफ़ॉल्ट क्रिया (जो पर्चे को जमा है) को रोकता है।

हालांकि यह शायद ajax की वजह से e.preventDefault();

+0

आप सही हैं कि यह डिफ़ॉल्ट कार्रवाई को रोकता है, लेकिन यह बुलबुले को भी रोकता है। – gdoron

+0

'इस उदाहरण में' - फॉर्म सबमिशन बबल नहीं होगा। – ahren

+0

आपको ऐसा क्यों लगता है? – gdoron

0

उपयोग करने के लिए आप अपने प्रपत्र सामान्य तरीके से प्रस्तुत किया जाना नहीं है बेहतर है। तो फ़ॉर्म के डिफ़ॉल्ट व्यवहार को रोकने के लिए आपको झूठी वापसी करनी होगी।

3

किसी फ़ंक्शन में return कथन के बाद कोई भी कोड कभी निष्पादित नहीं किया जाएगा। यह फ़ंक्शन निष्पादित करना बंद कर देता है और इस फ़ंक्शन रिटर्न मान को पास करता है (false इस मामले में)। आपका फ़ंक्शन "कॉल" ईवेंट कॉलबैक है। यदि यह कॉलबैक false देता है, तो फॉर्म वास्तव में सबमिट नहीं किया जाएगा। अन्यथा, इसे सबमिट किया जाएगा क्योंकि यह जावास्क्रिप्ट के बिना करेगा।

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