2014-09-18 5 views
5

मैंने अलर्टिफ़ाई के साथ अपना कोड थोड़ा छोटा और संशोधित करने का निर्णय लिया। मेरे पुराने कोड:अलर्टिफ़ पुष्टि से पहले निष्पादित कर रहा है?

<script type="text/javascript"> 
$('.ask').click(function(){ 
    var answer = confirm('<?php echo $this->translate('Delete route?'); ?>'); 
    return answer; 
}); 

जब मैं प्रेस ठीक एक PHP स्क्रिप्ट चलाता है और रिकॉर्ड को हटाता है। जावास्क्रिप्ट सही या गलत लौटता है।

अलर्टिफ़ाई के साथ मेरी समस्या यह है कि मैं ठीक से दबा या रद्द नहीं कर सकता, मेरी PHP स्क्रिप्ट इससे पहले चलता है। यहां कोड है:

$(".ask").click(function(event){ 
alertify.confirm("Are you sure you want to commit your reservation?", function (e) { 
    if (e) { 
     return true; 
    } else { 
     return false; 
    } 
}); 

});

मैं इसी तरह की समस्याओं के साथ कुछ लोगों को देखा और मैंने देखा कि मैं चूक (यह समझ में आता है) कोड को रोकने के उपयोग करने की आवश्यकता:

$(".ask").click(function(event){ 
event.preventDefault(); // cancel submit 
alertify.confirm("Are you sure you want to commit your reservation?", function (e) { 
    if (e) { 
     return true; // submit form skipping jQuery bound handler 
    } else { 

    } 
}); 

});

उस स्थिति में php स्क्रिप्ट ठीक नहीं है इससे पहले कि मैं ठीक/रद्द दबाता हूं लेकिन जब मैं बटनों में से किसी एक को दबाता हूं तो यह भी नहीं चलता है। कुछ नहीं हुआ। कोई मदद कृपया?

उत्तर

5

आप जावास्क्रिप्ट की असीमित प्रकृति में भाग रहे हैं। मूल कोड में, सभी जावास्क्रिप्ट का निष्पादन रोका गया है जबकि confirm संवाद खुला है, इसलिए आप सीधे इसके द्वारा वापसी मूल्य का उपयोग कर सकते हैं। हालांकि, जब आप alertify.confirm का उपयोग करते हैं, तो यह स्क्रिप्ट के निष्पादन को रोक नहीं देता है, इसलिए क्लिक हैंडलर तुरंत लौटाता है और इसके आस-पास का कोई भी कोड भी चलाएगा - यानी आपके PHP स्क्रिप्ट को आमंत्रित करने के लिए कोड। जब आप alertify.confirm कॉलबैक फ़ंक्शन के अंदर return true; का प्रयास करते हैं, तो आप उस आंतरिक फ़ंक्शन से alertify कोड पर लौट रहे हैं, जो आपके बाहरी क्लिक हैंडलर फ़ंक्शन से वापस नहीं लौट रहे हैं।

आपको इसके बजाय क्या करना है, इसके बजाय उपलब्ध कॉलबैक विधियों के साथ काम करना शुरू करना है - मैं आपके कोड को पुन: व्यवस्थित करने का सुझाव दूंगा। पुष्टि है कि .ask एक a टैग है के बाद, निम्नलिखित काम करना चाहिए:

$(".ask").click(function(event){ 
    var loc = $(this).attr('href'); 
    alertify.confirm("Are you sure you want to commit your reservation?", function (e) { 
    if (e) { 
     document.location.href = loc; 
    } 
    }); 
    //prevent link from being followed immediately on click 
    return false; 
}); 
+0

+1 लेकिन अन्य तरीके के रूप में - कॉलबैक फ़ंक्शन के बजाय - आप उपयोग कर सकते हैं '$ .Deferred()'। – Regent

+0

यहां काम नहीं करेगा चेक फॉर्म सबमिट करने के लिए इंतजार नहीं करेगा या रद्द करें http://jsfiddle.net/6zNaP/36/ – user3819192

+0

मान लीजिए कि '.ask' एक फॉर्म सबमिट बटन है, जिसे वास्तव में कहीं भी निर्दिष्ट नहीं किया गया है, बस इसे सामान्य, गैर-सबमिट करने वाले बटन में बदलें। इसके बाद डिफ़ॉल्ट कार्रवाई को रोकने की कोई ज़रूरत नहीं है, जो बदले में अन्य अवांछित मुद्दों की ओर ले जा सकती है क्योंकि पृष्ठ में अधिक जटिलता पेश की जाती है। –

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