2010-01-04 2 views
9

मेरे वेब पेज पर मेरे पास फाइलों की एक सूची है।हाइपरलिंक पर क्लिक किए जाने पर अभिभावक कंटेनर पर क्लिक करें, जब हाइपरलिंक

प्रत्येक फ़ाइल अपने स्वयं के कंटेनर div (div class = "file") में है। कंटेनर के अंदर फ़ाइल और विवरण का एक लिंक है।

मैं उपयोगकर्ता को फ़ाइल डाउनलोड करने के लिए कंटेनर पर कहीं भी क्लिक करने की अनुमति देना चाहता था। मैंने कंटेनर पर एक क्लिक इवेंट जोड़कर और बच्चे लिंक के href को पुनः प्राप्त करके ऐसा किया।

चूंकि फ़ाइल एक नई विंडो में खुलती है, यदि उपयोगकर्ता वास्तव में लिंक पर क्लिक करता है, तो फ़ाइल दो बार खुलती है।

इसलिए मुझे हाइपरलिंक क्लिक होने पर पैरेंट से कंटेनर क्लिक ईवेंट को रोकने की आवश्यकता है। ऐसा करने का सबसे अच्छा तरीका हाइपरलिंक to0 पर एक क्लिक फ़ंक्शन जोड़ने और event.stopPropagation सेट करना होगा? संभवतः यह घटना को कंटेनर तक बुलबुले से रोक देगा।

धन्यवाद बेन

उत्तर

8

हाँ, उपयोग stopPropagation। देखें: Prevent execution of parent event handler

+8

वह कौन jQuery उपयोग कर रहा है जो आपको बताएगा है? –

+1

jQuery के बिना काम करता है। ऑनक्लिक हैंडलर (घटना) {event.stopPropagation(); } –

15

माइक्रोसॉफ़्ट मॉडल में आपको ईवेंट की रद्दबबल संपत्ति को सत्य पर सेट करना होगा।

window.event.cancelBubble = true; 

W3C मॉडल में आप घटना के stopPropagation() विधि कॉल करना होगा।

event.stopPropagation(); 

यहाँ एक क्रॉस-ब्राउज़र समाधान है कि अगर आप एक रूपरेखा उपयोग नहीं कर रहे:

function doSomething(e) { 
    if (!e) e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
+4

यह थोड़ा उलझन में है क्योंकि आप यह नहीं दिखाते कि क्या जोड़ता है। – daveagp

2

मदद के लिए धन्यवाद।

मैं jQuery का उपयोग कर रहा था लेकिन गैर ढांचे समाधान को समझने के लिए अच्छा था।

जोड़ा गया लिंक के लिए निम्नलिखित:

$(".flink").click(function(e) { 
     e.stopPropagation(); 
    }); 

बेन

+0

धन्यवाद! मुझे वास्तव में यह समस्या थी, जो डीबग करने के लिए काफी परेशान था और इससे हल हो गया। मेरे मामले में मेरे पास .pub के लिए एक क्लिक हैंडलर था और उसके बाद लाइन $ ("। Pub a") जोड़ा गया। क्लिक करें (फ़ंक्शन (ई) {e.stopPropagation();}); – daveagp

+0

ईवेंट हैंडलर फ़ंक्शन से झूठी वापसी नहीं कर रहा है? – Johnus

+0

@ जॉन्सस - नहीं यह नहीं - देखें http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ –