मैं इस तरह jQuery कोड का एक बहुत कुछ देखा है, कहने की मुझे यह पसंद नहीं है:jQuery घटना बाध्यकारी और हैंडलिंग
<div id="myDiv">
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
</div>
<script>
$(document).ready(function(){
$('clickable').click(function(){
// Do some stuff...
});
});
</script>
मुझे पता है क्योंकि इसके बाद के संस्करण घटना बाध्यकारी और हैंडलिंग लोग ऐसा कर रहे हैं पृष्ठ पर एचटीएमएल संरचना उपलब्ध होने की आवश्यकता है, लेकिन यह वेब साइट के सभी विचारों, प्रस्तुति, तर्क और विन्यास को मिश्रित करने की ओर ले जाती है। इसके अलावा, यह तर्क को डीबग करना बहुत मुश्किल बनाता है, बस वहां किसी भी डीबगर के साथ।
तो, मैं इस तरह कोडिंग शुरू कर दिया है, एक अलग .js फ़ाइल पर (fiddle here):
// BEGIN: Event Handlers
var onLoad = function(){
$('.clickable').data('clicked', false);
};
var onMyDivClick = function(){
var clicked = $(this).data('clicked');
if (clicked) {
$(this).trigger('myCustomEvent');
} else {
alert('you clicked me');
$(this).data('clicked', true);
}
};
var onMyCustomEvent = function(){
$(this).css('color', 'dimGray');
alert('please don\'t click me again');
};
// END: Event Handlers
// BEGIN: Event Binding
$(window).on('load', onLoad);
$(document).on('click', '.clickable', onMyDivClick);
$(document).on('myCustomEvent', '.clickable', onMyCustomEvent);
// END: Event Binding
अब, मैं संरचना पेज पर किया जा रहा है के बारे में परवाह करने की जरूरत नहीं। मुझे $(document).ready(function(){});
के अंदर सबकुछ लपेटने की ज़रूरत नहीं है और मुझे परवाह करने की ज़रूरत नहीं है कि संरचना को AJAX के साथ लोड किया जा रहा है या नहीं।
प्रश्न 1 क्या दृष्टिकोण पर कोई डाउनसाइड्स हैं? अब तक, मुझे कोई नहीं मिला है। लेकिन हमारी साइटों पर कोड के बड़े पैमाने पर प्रतिक्रिया करने से पहले, मैं संभावित चेतावनी के बारे में सुनना चाहता हूं।
प्रश्न 2 नवीनतम jQuery सुविधाओं के साथ यह दृष्टिकोण और भी आगे कैसे लिया जा सकता है?
तो, ऑनलोड के अलावा, बाकी घटना को ऑनलोड के भीतर संभालने के लिए आगे बढ़ाना और उन्हें लक्ष्य के रूप में जितना संभव हो सके संलग्न करें: http://jsfiddle.net/codepic/8pE6z/2/ हालांकि, यह काफी प्रभावी ढंग से नष्ट कर देता है AJAX के साथ लोड नियंत्रण पर घटना हैंडलिंग। जब भी 'नियंत्रण' लोड होता है तो शायद मुझे एक कस्टम ईवेंट ट्रिगर करने की आवश्यकता होती है। इस तरह: http://jsfiddle.net/codepic/8pE6z/3/ इस तरह, दस्तावेज़ तत्व पर केवल एक ईवेंट हैंडलर होगा जो .control की तलाश करता है और शेष घटना लक्ष्य के करीब बाध्यकारी करता है। –