आप एक अतिरिक्त हैंडलर के साथ लिंक से खलबली मचाने वाले, इस तरह से प्राप्त क्लिक रोक सकता बुलबुले से लिंक (ठीक है, वास्तव में नहीं, लेकिन उनके हैंडलर निष्पादन से), लेकिन प्रत्येक तत्व के लिए हैंडलर नहीं बनाते हैं, यह .stopImmediatePropagation()
के माध्यम से किया जाता है।
<div id="container">
<form>
<div class="field">
<input id="demo" type="text" name="demo" />
</div>
<div class="field">
<input id="demo2" type="text" name="demo2" />
</div>
</form>
</div>
कोड इस तरह दिखता है:
$(document).ready(function() {
$('#container').click(function(evt) {
if(this == evt.target) {
console.log('clicked container',evt.target);
$('#demo').focus();
} else {
console.log('clicked child -> ignoring');
}
});
$('.field').click(function(evt) {
if(this == evt.target) {
console.log('clicked field div',evt.target);
$(this).find('input').focus();
} else {
console.log('clicked child -> ignoring');
}
});
});
आप कंटेनर उस रूप में शामिल क्लिक कर सकते हैं
स्रोत
2010-10-05 13:36:49
यह ईवेंट प्रचार को रोकने के लिए प्रत्येक लिंक पर एक क्लिक हैंडलर जोड़ने के लिए थोड़ा "ओवरकिल" लगता है (बेशक यह लिंक की संख्या पर निर्भर करता है)। लेकिन किसी भी विशिष्ट तत्व के लिए घटना प्रसार को रोकने के लिए यह एक अच्छा तरीका है। –
@ फ़ेलिक्स - यदि कई लिंक हैं तो मैं पूरी तरह से '.delegate()' हैंडलर के सेट के साथ एक अलग दृष्टिकोण लेता हूं :) (आप उपरोक्त * पहले * हैंडलर के पहले प्रतिनिधि संस्करण का उपयोग कर सकते हैं) । –
मैंने अभी 'प्रतिनिधि() 'के साथ प्रयास किया है और यह मेरे लिए काम नहीं करता है: http://jsfiddle.net/cxcfA/। मुझे लगता है क्योंकि घटना पहले से ही बुलबुला हुआ है। या आप कुछ और मतलब है? –