2010-09-11 19 views
5

के माध्यम से सुंदरता से "क्लिक इवेंट" पास कर रहे हैं जब कोई गैर-लॉग इन उपयोगकर्ता किसी दिए गए बटन पर क्लिक करता है, तो मैं ईवेंट को रोकना चाहता हूं, अपना ऑउथ इकट्ठा करना चाहता हूं, अगर मेरे पास नहीं है तो उसका ईमेल इकट्ठा करें, और उसके बाद निष्पादित करें घटना।कई कॉलबैक

मैं जावास्क्रिप्ट में सबकुछ करना चाहता हूं क्योंकि इससे चीजें अधिक सरल रहती हैं।

यह मैं इसे कैसे क्रियान्वित कर रहा हूँ, और मैं 2 प्रश्न हैं:

  1. वहाँ कई स्तर कॉलबैक करने का एक और अधिक सुरुचिपूर्ण रास्ता नहीं है?
  2. जिस तरह से मैं अंत में घटना को ट्रिगर कर रहा हूं वह हैकिश लगता है। ऐसा करने का बेहतर तरीका क्या हो सकता है?
jQuery("a.callbacktesting").click(function(event){ 

    if (success==false){ 
     event.preventDefault(); 
     event.stopImmediatePropagation(); 
     authentication({endevent:event,followup:afterEmail},collectEmail, failFn); 
    } 
    }); 

    //1st level function 
    function authentication(params, successFn, failFn){ 
     if (success=true){ 
     successFn(params,params.followup,failFn); 
     }else{ 
     failFn(); 
     }  
    } 

    //2nd level function 
    function collectEmail(params, successFn, failFn){ 
     console.log("Collecting email"); 
     if (success=true){ 
     successFn(params); 
     }else{ 
     failFn(); 
     }; 
    } 

    //After everything is done, you want to execute this 
    function afterEmail(params){ 
    jele=$(params.endevent.currentTarget) 
    action=params.endevent.type 
    jele.trigger(action); 
    } 

उत्तर

0

एक चर में अपने क्लिक करें घटना कॉलबैक भंडारण पर विचार करें। जब उपयोगकर्ता बटन क्लिक करता है, तो आपका जेएस पहले जांचता है कि यह प्रमाणित है। यदि ऐसा है, तो यह कॉलबैक निष्पादित करता है। यदि ऐसा नहीं है, तो यह प्रमाणीकरण दिनचर्या को कॉलबैक को तर्क के रूप में पास करता है। जब प्रमाणीकरण दिनचर्या सफल होती है, तो यह कॉलबैक निष्पादित कर सकती है।

+0

हम्म, यही मैंने किया - अंतःवृत्त: घटना, मैंने घटना को सीधे एक परम के रूप में रखा। समस्या यह है कि मैं क्लिक ईवेंट को चर के रूप में कैसे संग्रहीत कर सकता हूं और इसे निष्पादित कर सकता हूं। मुझे इसे निष्पादित करने के लिए कमांड (event.XXX) नहीं मिल रहा है –

1

इस के साथ क्या है:

if (success = true) { 

?

आप महसूस करते हैं कि सच है, सही करने के लिए वैश्विक चर "सफलता" की स्थापना है? आप पता लगाने के लिए अगर चर "सफलता" सच के बराबर है चाहते हैं, इस का उपयोग करें:

if (success === true) { 

नोट 3 बराबर अंक।

//After everything is done, you want to execute this 
function afterEmail(event) { 
    $(event.currentTarget).trigger(event.type); 
} 

//2nd level function 
function collectEmail(event) { 
    console.log("Collecting email"); 
    if (success === true){ 
     afterEmail(event); 
    } else { 
     failFn(); 
    } 
} 

//1st level function 
function authentication(event) { 
    if (success === true) { 
     collectEmail(event); 
    } else { 
     failFn(); 
    } 
} 

jQuery("a.callbacktesting").click(function (event) { 
    if (success === false) { 
     event.preventDefault(); 
     event.stopImmediatePropagation(); 

     authentication(event); 
    } 
}); 

आप डोम घटनाओं को गति प्रदान करने की कोशिश कर रहे हैं, तो आप jQuery.trigger या इसी तरह का उपयोग करना होगा:

अपने कोड की एक सख्त अनुवाद करना, मैं इस परिणाम मिला। अधिक सहायता के लिए मुझे आपके कार्यक्रम के बारे में अधिक जानकारी चाहिए।

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