2012-07-19 15 views
6

मैं बहुत की तरह एक दूसरी घटना पहली पर निर्भर गति प्रदान करने के कोशिश कर रहा हूँ:मैं एक jquery ट्रिगर घटनाओं को पूरा करने का पता कैसे लगा सकता हूं?

... 
$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
}); 

यह दूसरी घटना को ट्रिगर करने के प्रयास करने से पहले पूरा करने वाले पहले ट्रिगर के लिए इंतजार नहीं कर रहा है। क्या पहले ट्रिगर को पूरा करने के लिए इंतजार करना संभव है?

उत्तर

1

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

http://api.jquery.com/trigger/

आप वास्तव में क्या कर रहे हैं दूसरी समारोह में कोड चल रहा है और उसके बाद ट्रिगर से बुलाया ईवेंट हैंडलर में एक पैरामीटर के रूप परिणाम गुजर

। यदि आप उन्हें क्रम में चलाने के लिए चाहते हैं तो आपको ईवेंट ईवेंट हैंडलर के भीतर दूसरी घटना को ट्रिगर करने की आवश्यकता है।

2

शायद आप इस हैं:

$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    setTimeout(function(){ 
     $('#productId').trigger('change'); 
    },1); 
}); 
1

आप javascripts का उपयोग कर सकते setTimeout() फ़ंक्शन, ताकि समारोह कुछ अंतराल के बाद निष्पादित करेंगे।

$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change', function() { 
setTimeout(function(){  
$('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
},100); 
}); 
+0

@ आर्चर मुझे आपको धन्यवाद दें, धन्यवाद दोस्त: पी – Shreedhar

1

यदि आपका ईवेंट हैंडलर एसिंक्रोनस कॉल निष्पादित नहीं करता है, तो ट्रिगर किया गया ईवेंट निष्पादित और समाप्त हो जाएगा, केवल तभी अगली पंक्ति में जाएगा। JsFiddle

$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change'); 
// Execute after change complete 
$('#productId').val(data.contents.product); 
$('#productId').trigger('change'); 

अतुल्यकालिक कॉल ईवेंट हैंडलर में (setTimeOut, अजाक्स आदि) आप यह कर सकते हैं के साथ : JsFiddle

पैरामीटर के रूप में एक कॉलबैक फ़ंक्शन जोड़े अपने ईवेंट हैंडलर में:

$("#productFamilyId").change(function(e, callback) { 
    // Simulating ajax 
    setTimeout(function() { 
     if (typeof callback === "function") 
      callback(); 
    }, 3000); 
}); 

और इस तरह ट्रिगर करें:

$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
});