2012-02-04 21 views
22
से मूल्य रिटर्निंग

मैं एक ट्रिगर फोन का उपयोग कर रहा एक कस्टम घटना से एक मूल्य मिलता है लेकिन मैं इसे एक मूल्य और वापस करना चाहते इसके केवल मुझे वस्तु वस्तु दे रही है जब मैं निम्नलिखित कॉल करें:Jquery: ट्रिगर

var user_id=$("#my_div").trigger("get_id", [username]); 

मेरे ट्रिगर घटना समारोह इस तरह दिखता है:

$("#my_div").on("get_id", function(e, username){ 
    var user_id; 
    if (username='fred'){ 
     user_id=1; 
    } 
    else if(username='mario'){ 
     user_id=2; 
    } 
    return user_id; 
}); 
+0

संभावित डुप्लिकेट [एक कस्टम फ़ंक्शन को कॉल करने के लिए jQuery .trigger का उपयोग करें] (http://stackoverflow.com/questions/3142724/use-jquery-trigger-to-call-a- कस्टम- फ़ंक्शन- वह रिटर्न-ए-वैल्यू) –

उत्तर

29

आप ट्रिगर से एक मूल्य वापस नहीं लौट सकते लिख सकते हैं, लेकिन आप कई अलग अलग तरीकों के बारे में जानकारी स्टोर कर सकते हैं, एक तरह से एक पैरामीटर के रूप में एक वस्तु का उपयोग कर रहा है jQuerys .data() विधि

//event 
$("element").on("click", function() { 
    $(this).data("userId", 2); 
}); 
//trigger 
$("element").trigger("click").data("userId") //2 

एक और बात आप कर सकते हैं एक चर है कि घटना के बाहर घोषित संशोधित करने और फिर ट्रिगर बुला के बाद यह उपयोग कर रहा है, या तत्व this कीवर्ड इस प्रकार के साथ घटना है कि में एक संपत्ति के रूप में यह भंडारण:

//inside the event function 
this.userId = 2; 

//outside the event 
$("element").trigger("click").get(0).userId 

आशा है कि यह मदद करता है।

संपादित करें:

इसके अलावा, .triggerHandler() का उपयोग कर नीचे @Arm0geddon answer पर एक नज़र डालें,, बस सावधान रहना यह कुछ साइड इफेक्ट है, डोम पदानुक्रम खलबली मचाने वाले नहीं हैं।

+0

क्या यह async AJAX के साथ काम करेगा? –

+0

मुझे ऐसा नहीं लगता .. –

1

trigger समारोह आप ईवेंट हैंडलर से लौट मूल्य वापस नहीं करता।

यह रिटर्न jQuery object ...

.trigger (eventType [, extraParameters]) देता है: jQuery

docs

यह इसलिए आप इस तरह की बातें लिख सकता है डिजाइन किया गया था:

$("#my_div").trigger("get_id", [username]).val('foo').css('color', 'red'); 
+0

ठीक है उस मामले में क्या कोई तरीका है कि मैं इसे Jquery ऑब्जेक्ट में डाल सकता हूं ताकि यह पहुंच योग्य हो सके? –

+0

@Petty_Crim। यह एक अच्छा विचार नहीं होगा, इसे एक चर या एक ** छुपा इनपुट ** में सहेजें। – gdoron

+0

मुझे लगता है कि मैं इसे केवल एक डेटा ऑब्जेक्ट यानी $ ("# my_div") असाइन करता हूं। डेटा ("user_id", user_id) लेकिन मुझे उम्मीद थी कि एक वैकल्पिक समाधान होगा। –

2

एक ट्रिगर प्रतिक्रिया वापस नहीं कर सकता है, क्योंकि यह एक कॉलबैक विधि है।

इसके अलावा jQuery में तरल एपीआई है, इसलिए .trigger() हमेशा $(this) देता है।

//event 
$("element").on("click", function(event, informationObj) { 
     informationObj.userId = 2; //you have to access a propery so you can modify the original object 
}); 
//trigger 
var informationObj = {userId : 0}; 
$("element").trigger("click", [informationObj ]); //informationObj.userId === 2 

अन्य तरीके से उपयोग कर रहा है:
आप $("#my_id").trigger(something).show().on(someelse)...

22

आप क्या कर सकते हैं '.trigger()' के बजाय '.triggerHandler()' का उपयोग करें। यह एक मूल्य वापस करेगा। triggerHandler docs

var user_id=$("#my_div").triggerHandler("get_id", [username]); 
+6

यह मेरे लिए सही जवाब है। – Tim

+2

बस सावधान रहें कि 'ट्रिगर हैंडलर' ट्रिगर के समान सटीक चीज नहीं करता है, जो अनजान बग का कारण बन सकता है। दस्तावेज़ों में इस अंतर को शामिल किया गया है, जैसे कि डोम पदानुक्रम को बुलबुला नहीं करना या किसी ईवेंट के डिफ़ॉल्ट व्यवहार को उत्पन्न नहीं करना। – NicoSantangelo

1

इस प्रयास करें:

$("#my_div").on("get_id", function(e, username){ 
    var user_id; 
    if (username='fred'){ 
     user_id=1; 
    } 
    else if(username='mario'){ 
     user_id=2; 
    } 
    return user_id; 
}); 

var user_id=$("#my_div").triggerHandler("get_id", ["username"]); 
0

triggerHandler सही जवाब है, लेकिन यह ध्यान दिया लायक है के रूप में मैं इसे यहाँ अभी तक नहीं देखा है ... साथ ही आप के साथ एक और कॉलबैक पारित कर सकते हैं, और अपने "चालू" फ़ंक्शन को पासबैक कॉलबैक को कुछ रिटर्न वैल्यू सेट करने के लिए कॉल करें।यह मानना ​​बेहतर है कि किसी कारण से प्रतीक्षा न करें।

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