19

जिज्ञासा से - jQuery के triggerHandler के लिए मामलों का उपयोग/उपयोग क्या है? जहां तक ​​मैं कह सकता हूं, trigger और triggerHandler के बीच एकमात्र "असली" अंतर यह है कि मूल घटना आग लगती है या नहीं, और घटना बुलबुले व्यवहार (हालांकि triggerHandler का बुलबुला व्यवहार कुछ और में trigger के साथ दोहराना मुश्किल नहीं लगता है कोड की रेखाएं)। देशी घटना को आग लगाना सुनिश्चित करने का क्या फायदा है?jQuery में ट्रिगर हैंडलर बनाम ट्रिगर

मैं उत्सुक हूं कि यह सुविधा सुविधा है या यह एक गहरा कारण है, और मैं इसका उपयोग क्यों करूंगा।

उत्तर

57
http://api.jquery.com/triggerHandler/

.triggerHandler() विधि बर्ताव इसी तरह .trigger करने के लिए() पर डॉक्स से

, निम्नलिखित अपवादों के साथ:

  • .triggerHandler() विधि नहीं है ईवेंट होने का डिफ़ॉल्ट व्यवहार (जैसे फॉर्म सबमिशन) का कारण बनता है।

को रोकने नहीं डिफ़ॉल्ट ब्राउज़र कार्य आप एक कार्रवाई है कि फोकस या चयन, आदि आदि आदि पर होता है, एक शैली लागू होने वाला निर्दिष्ट करने के लिए अनुमति देते हैं। हो सकता है कि आपके पास एक गतिशील मेनू है जो जावास्क्रिप्ट आधारित है, इसलिए आप शैली को पूरी तरह से सीएसएस के साथ लागू नहीं करना चाहते हैं अन्यथा जावास्क्रिप्ट अक्षम वाले लोगों को यह समझ में नहीं आता कि लेआउट अजीब क्यों दिखता है। आप $('menu1select').triggerHandler('click');

  • जबकि .trigger (की तरह कुछ का उपयोग कर सकते हैं) jQuery वस्तु के अनुरूप सभी तत्वों पर कार्यवाही करेंगे, .triggerHandler() केवल सबसे पहले मिलने वाला तत्व प्रभावित करता है।

आप एक घटना है जो उदाहरण के लिए onclick एक तत्व को छुपाता है, और आप, आम तौर पर उस कार्य को करने के बजाय प्रत्येक तत्व निर्दिष्ट करने के लिए होने के लिए चाहते हैं, तो आप $('.menu').triggerHandler('click') उपयोग कर सकते हैं;

  • घटनाक्रम .triggerHandler() के साथ बनाया डोम पदानुक्रम ऊपर बुलबुला नहीं है; यदि उन्हें लक्ष्य तत्व द्वारा को सीधे नियंत्रित नहीं किया जाता है, तो वे कुछ भी नहीं करते हैं।

, प्रचार रोकता है, hopyfully इस एक व्याख्या करने के लिए नहीं है ...

  • इसके बजाय jQuery वस्तु लौटने (चेनिंग अनुमति देने के लिए) की .triggerHandler() रिटर्न जो कुछ भी मूल्य पिछले हैंडलर द्वारा निष्पादित किया गया था, इसे निष्पादित किया गया था। कोई संचालकों शुरू हो रहे हैं, तो यह रिटर्न अपरिभाषित

यह एक स्वयं के साथ-साथ व्याख्यात्मक होना चाहिए ...

+0

दस्तावेज़ इसलिए मैंने पहली बार सवाल पूछा। मैं व्यवहार को समझता हूं, लेकिन मैं उत्सुक हूं कि यह एक सुविधा समारोह है या यह एक गहरा कारण है। –

+1

आपने गंभीरता से डाउनोट किया क्योंकि आप दस्तावेज़ों में दिए गए उदाहरणों को समझ नहीं पाते हैं। ठीक है, तो मैं इसे आपके लिए बाहर जादू करता हूं। – Robert

+5

आपको ऊपर उठाने की ज़रूरत नहीं है, आप बस वोट नहीं दे सकते ... मैंने आपको और उदाहरण दिए और आप अभी भी समझ में नहीं आये, जो मेरी गलती नहीं है। कुछ मामलों में आप वास्तविक क्लिक पर झूठी वापसी नहीं करना चाहते हैं, इसलिए # 1 मान्य है। # 2 हाँ ... यह बिंदु है, केवल एक छुपा रहा है, लेकिन पूरे मिलान सरणी को बुला रहा है। तो आप अंतराल सेट कर सकते हैं जो छिपाने के लिए काम करता है # 3 देखें # 1, वास्तविक क्लिक बनाम नकली के आधार पर आप विभिन्न कार्यों को चाहते हैं। # 4 यदि आप एक नया निर्माण किए बिना अंतिम वास्तविक घटना द्वारा वापस मूल्य चाहते हैं। – Robert

1

देशी घटना को आग लगाना सुनिश्चित करने का क्या फायदा है?

  • आप 'फोकस' घटना के लिए बाध्य कर कार्रवाई है, लेकिन आप ब्राउज़र वास्तव में ध्यान केंद्रित यह ध्यान केंद्रित (गूंगा लग सकता है नहीं करना चाहते, लेकिन यह भी हो सकता है, यह नहीं कर सकता? एक कोड की तरह है कि आप वर्तमान फोकस खोए बिना एक बार निष्पादित करना चाहते हैं)।

  • एक घटक है कि आप एक और घटक इसके अंदर है कि 'लोड' (सिर्फ एक सामान्य बात का एक उदाहरण) ट्रिगर करना चाहते हैं कर रहे हैं।

    उस स्थिति में, यदि आप माता-पिता के 'लोड' के समय बच्चों के 'भार' को बुला रहे हैं, तो आप ऐसा नहीं करना चाहते हैं क्योंकि अगर ईवेंट.स्टॉपप्रॉपैगेशन नहीं कहा जाता है तो यह अनंत कॉल का कारण बनता है

$container.on('load', function() { 
    $somethingInsideContainer.trigger('load'); 
    // Would cause a loop if no event.stopPropagation() is called 
}); 

उस मामले आप triggerHandler कॉल करने के लिए() है में: 'लोड' घटना के श्रोताओं (bubling के कारण) से।

1

अंतर 1: आप ट्रिगर का उपयोग कर JQuery ऑब्जेक्ट से मेल खाने वाले सभी तत्वों को कॉल कर सकते हैं।

// उदाहरण 1 ट्रिगर के लिए। ट्रिगर का उपयोग करते समय सभी 3 बटन क्लिक घटनाओं को निकाल दिया जाता है। // ट्रिगर हैडलर() के साथ ट्रिगर विधि को बदलने का प्रयास करें। आप केवल पहला बटन तत्व ईवेंट हैंडलर आग लगेंगे। triggerHandler साथ

<button id = "button1">button1</button> 
<button id = "button2">button2</button> 
<button id = "button3">button3</button> 

$("#button1").on("click", function(){ 
alert("button1 clicked"); 
}); 
$("#button2").on("click", function(){ 
alert("button2 clicked"); 
}); 
$("#button3").on("click", function(){ 
alert("button3 clicked"); 
}); 

// स्थानापन्न ट्रिगर अंतर दिखाई दे

$("#button1, #button2, #button3").trigger("click"); 

अंतर 2: जब triggerHandler() एक तत्व घटना के लिए उपयोग करते हुए, देशी घटना उस तत्व का आह्वान नहीं किया जाएगा। ट्रिगर() ठीक काम करेगा।

// उदाहरण:

triggerHandler साथ

// स्थानापन्न ट्रिगर अंतर दिखाई दे

<button id = "button1">button1</button> 
    <button id = "button2">button2</button> 

$("#button1").on("click", function(){ 
$("#button2").trigger('click'); 

}); 

$("#button3").on("click", function(){ 
var value = $("#button2").triggerHandler('click'); 
    alert('my value:'+ value) 
}); 

$("#button2").on('click', function(){ 
alert("button2 clicked"); 

}); 

अंतर 3: ट्रिगर() jQuery वस्तु लौटने जबकि triggerHandler() पिछले संभाल मान या कोई संचालकों शुरू हो रहे हैं, तो यह रिटर्न अपरिभाषित

// Example3

<button id="button1">Button1</button> 
<button id="button2">Button2</button> 
<button id="button3">Button3</button> 


$("#button1").on("click", function(){ 
var myValue = $("#button2").trigger('click'); 
    alert(myValue); 
}); 

$("#button3").on("click", function(){ 
var value = $("#button2").triggerHandler('click'); 
    alert('my value:'+ value) 
}); 

$("#button2").on('click', function(){ 
alert("button2 clicked"); 
    return true; 
}); 

अन्य अंतर

ट्रिगर के साथ ट्रिगर किए गए ईवेंट हैंडलर() डोम पदानुक्रम को बुलबुला नहीं करते हैं; अगर वे सीधे लक्षित तत्व द्वारा नियंत्रित नहीं होते हैं, तो वे कुछ भी नहीं करते हैं।

0

मुझे मुख्य अंतर के लिए कि 'triggerHandler' रिटर्न जो कुछ भी पिछले हैंडलर द्वारा दिया गया था, जबकि "ट्रिगर" कर देता है jQuery वस्तु है।

तो, इस तरह के रूप में एक हैंडलर के लिए:

$(document).on('testevent', function() 
    { 
    return false; 
    }); 

'triggerHandler' का उपयोग करके आप निम्न कर सकते हैं:

if($(document).triggerHandler('testevent') === false) 
    { 
    return; 
    } 

तो तुम 'triggerHandler' का उपयोग करता है, तो आप का जवाब चाहते थे होगा परिणाम हैंडलर से वापस आ गया।

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