2013-03-20 18 views
21

मुझे trigger कॉल के कॉलबैक में एक कस्टम ईवेंट ट्रिगर करने की आवश्यकता है, लेकिन मैं इसे काम नहीं कर सकता।एक jQuery ट्रिगर पर कॉलबैक फ़ंक्शन कैसे चलाएं ("क्लिक करें")?

var $input = $(".ui-popup-container").find("input").eq(2); 

function runtests() { 
    console.log("clicked the input"); 
}; 
$input.trigger('click', runtests()); 

और इस:

var $input = $(".ui-popup-container").find("input").eq(2); 
$input.trigger('click', function(){ 
    console.log("clicked the input"); 
} 

न तो जिनमें से काम करता है

मैं इस कोशिश की।

प्रश्न:
मैं कैसे एक कॉलबैक फ़ंक्शन जब मैं एक तत्व पर एक क्लिक के ट्रिगर कर रहा हूँ को चलाने के लिए मिलता है?

+1

तुम क्यों दूसरा पैरामीटर के रूप में अपरिभाषित जोड़ रहे हैं को गति प्रदान करने में मदद करता है? ऐसा करने वाला दूसरा पैरामीटर क्या है? क्या आप ट्रिगर और बाध्य उलझन में हैं? –

+0

यह कॉलबैक फ़ंक्शन पर मेरा प्रयास है ...मैंने इसे [jquery API] (http://api.jquery.com/trigger/) के अनुसार '[]' में लपेटने का भी प्रयास किया, लेकिन यह भी काम नहीं करता – frequent

+1

'.trigger' किसी भी कॉलबैक को स्वीकार नहीं करता है। '$ input.trigger ('क्लिक करें')' 'इनपुट 'तत्वों पर' क्लिक 'ईवेंट ट्रिगर करता है, यानी यह उन तत्वों के लिए' क्लिक 'ईवेंट हैंडलर निष्पादित करेगा। ऐसा लगता है कि आपने 'runtest' को '$ इनपुट' से बांध दिया है, लेकिन मुझे यकीन नहीं है कि आप वास्तव में क्या चाहते हैं। –

उत्तर

21

जब आप trigger पर कॉल करते हैं, तो बाउंड इवेंट हैंडलर तुरंत निष्पादित किया जाता है, इसलिए आपको किसी भी कॉलबैक की आवश्यकता नहीं होती है। बस

$input.trigger('click'); 
runtests(); 
+0

+1 दस्तावेज़ों के मुताबिक, ठीक काम करना चाहिए: http://qunitjs.com/cookbook/#testing-user-actions। –

+0

जाने का रास्ता। धन्यवाद – frequent

+1

@ फ़्रीक्वेंट, आप निश्चित रूप से कॉलबैक और हैंडलर उलझन में थे। यदि कार्रवाई से जुड़ी कोई एसिंक्रोनस गतिविधि नहीं है, तो यह एक हैंडलर है जिसे आप * ट्रिगर * करते हैं, जबकि यदि असीमित गतिविधि होती है, तो जब यह होता है (या स्थिति के अनुसार) आप इसकी प्रतिक्रिया को संभालने के लिए * कॉलबैक * असाइन करते हैं। –

4

ट्रिगर में कॉलबैक फ़ंक्शन नहीं है।

.trigger(eventType [, extraParameters ]) 

Official Document

आप

var $input = $(".ui-popup-container").find("input").eq(2); 

$input.on('click',function(){ 
    console.log("clicked the input"); 
}); 
+0

@dystroy क्षमा करें मैं अपना जवाब संपादित कर रहा था ... –

+0

ठीक है। स्पष्टीकरण देने के लिए धन्यवाद। – frequent

0

क्या कर सकते हैं उत्प्रेरक एक कॉलबैक फ़ंक्शन नहीं है - तो आप बेहतर .on विधि का उपयोग करने के लिए अपने कोड को फिर से लिख सकते हैं ।

$("body").on("click", "#click", function() { 
    alert("Clicked!"); 
}); 

JSFiddle

11

सबसे पहले आपको क्लिक ईवेंट को बाध्य करने की आवश्यकता है और फिर आप क्लिक ईवेंट को ट्रिगर कर सकते हैं।

$input.bind('click', function() { 

    console.log("clicked the input"); 
}); 

$input.trigger('click'); 
+0

yup। एक तरफ है। धन्यवाद। – frequent

+2

'.bind()' के बजाय '.on()' का उपयोग करें। – Simon

2

आप bind या on उपयोग करने के लिए कॉलबैक जोड़ने की जरूरत है। आपके मामले में यह इस तरह दिखना चाहिए: क्लिक बंधन के लिए

var $input = $(".ui-popup-container").find("input").eq(2); 

function runtests() { 
    console.log("clicked the input"); 
}; 

$input.bind('click', runtests); 

यहां तक ​​कि छोटे संस्करण $input.click(runtests)

तो यह क्लिक पर बुलाया जाएगा या आप $input.trigger('click') या बस $input.click() साथ मैन्युअल रूप से इसे गति प्रदान कर सकते हैं।

0

का उपयोग आप हर इनपुट पर एक क्लिक के संचालक है, लेकिन एक विशिष्ट तत्व पर कुछ करना चाहते हैं:

var $container = $(".ui-popup-container"), 
    special = 2; 

$container.on('click', 'input', function() { 
    // do something for every input 

    if($(this).index() == special) { 
     // your "callback", e.g. the function you want to execute on input:eq2 click 
     myfunction(); 
    } 
}).find('input').eq(special).trigger('click'); 
8

हाँ - यह सच है कि ट्रिगर कॉलबैक नहीं ले करता है, लेकिन हम कर सकते हैं पैरामीटर के रूप में कॉलबैक पास करें। इस वसीयत

//.trigger(eventType [, extraParameters ]) 

$("#element").bind("customCall", function(e, callback){ 
    callback(); 
} 
var callback = function(){alert("Hello");} 
$("#element").trigger("customCall",[callback]); 

आशा

+2

काम करता प्रतीत होता है यदि आप किसी डॉम तत्व के लिए बाध्य ईवेंट को परिभाषित करते समय कॉलबैक फ़ंक्शन असाइन करने के लिए पहले से ही परिचित हैं, तो यह उत्तर वास्तव में आपको बताता है कि आप वास्तव में गतिशील कॉलबैक फ़ंक्शन कैसे पारित कर सकते हैं उस समय जब घटना ट्रिगर होती है। यह मुझे इस पृष्ठ पर सबसे मूल्यवान उत्तरों में से एक बनाता है। – tobylaroni

+0

@tobylaroni के साथ सहमत हैं। निश्चित नहीं है कि यह स्वीकार्य उत्तर क्यों नहीं था! शायद कस्टम कॉल से 'ट्रिगर' के लिए सवाल विशिष्ट था। – Rahatur

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