15

में एम्यूलेट डब्ल्यू 3 सी इवेंट कैप्चरिंग मॉडल इंटरनेट एक्सप्लोरर में event capturing अनुकरण करना संभव है?आईई

एक उदाहरण:

 
<a>one</a> 
<a>two</a> 
<a>three3</a> 

<script> 
var links = document.getElementsByTagName("A"); 
for (var i=0; i < links.length; i++) { 
    links[i].onclick = function(){ 
    alert("clicked"); 
    }; 
} 
</script>

मैं फायरिंग से इन सभी क्लिक ईवेंट रोकना चाहते हैं। मैं इसे एक एकल पर्यवेक्षक के साथ कर सकता हूं:

document.addEventListener("click", function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
}, true);

मैं आईई में ऐसा कैसे कर सकता हूं? आईई का समर्थन नहीं करता है। यह attachEvent का समर्थन करता है, लेकिन इसमें useCapture विकल्प नहीं है।

मुझे setCapture method मिला है, लेकिन यह डब्ल्यू 3 कैप्चरिंग मॉडल से संबंधित नहीं दिखता है।

उत्तर

5

आम तौर पर आप event order की वजह से नहीं कर सकते हैं। आईई में घटनाएं कैप्चरिंग चरण के बिना लक्ष्य तत्व से बुलबुले शुरू हो जाएंगी ताकि आप उन्हें पहले से पकड़ सकें।

केवल एक बात आप कर सकते हैं नहीं है, और यह केवल संभव आप सभी ईवेंट हैंडलर्स का प्रबंधन करता है, तो है।

  1. कब्जा पैरामीटर के साथ addEvent के लिए एक आवरण लिखें
  2. कैप्चरिंग करते निम्नलिखित

    1. रजिस्टर एक सरल घटना बुदबुदाती, जिसके साथ आवश्यक है, तो है कि
    2. सब चला जाता है पेरेंट चेन के रास्ते, सभी तत्वपर सहेज रहे हैं
    3. ट्रेवल्स पिछड़े इस Array तत्वों
1

आईई एक तत्व है में से प्रत्येक पर मूल ईवेंट हैंडलर लागू।setCapture() विधि है कि आप पा सकते हैं उपयोगी http://msdn.microsoft.com/en-us/library/ms536742(v=vs.85).aspx यह आप रूट करने के लिए तत्व यह है कि setCapture()

+0

एक टिप्पणी छोड़ कृपया जब आप downvote! जहां तक ​​मुझे पता है, कैप्चर चरण का अनुकरण करने का एकमात्र तरीका setCapture का उपयोग कर रहा है। ऐसा लगता है कि ओपी इसका उपयोग नहीं करना चाहता, लेकिन कोई दूसरा रास्ता नहीं है। अगर आप मुझे वोट देना चाहते हैं तो कृपया मुझे गलत साबित करें। –

+1

मुझे संदेह है कि यह डाउनवॉटेड हो गया है क्योंकि ओपी आईई में कैप्चर बनाम बबलिंग इवेंट चरणों से निपटने के लिए कैसे पूछ रहा था, ताकि वह बाल तत्वों को घटनाओं को प्राप्त करने से रोक सके। '.setCapture() 'विधि का उपयोग करने का कोई तरीका नहीं है, जो वह करने का प्रयास कर रहा है - यह" कैप्चर चरण का अनुकरण नहीं करता "बिल्कुल नहीं है, यह ड्रैग के दौरान माउस ईवेंट के लक्ष्यीकरण को प्रभावित करता है। – natevw

2

setCapture ब्राउज़र विंडो के बाहर कुछ माउस से संबंधित कार्रवाई

बनाए रखने के लिए प्रयोग किया जाता है और यह कहा जाता है के लिए सभी माउस की घटनाओं की अनुमति देता है खींचें & ड्रॉप

किसी तरह लागू करने के लिए यदि आप एक तत्व mousedown प्रयोग किया जाता है और आप काम करने के लिए

अगर आप setCapture() MouseMove घटना के लिए जारी रहेगा ब्राउज़र विंडो MouseMove घटना बंद हो जाता है के बाहर अपने सूचक के साथ जाना होगा बाहर काम करने के लिए ब्राउज़र विंडो

https://developer.mozilla.org/en/DOM/element.setCapture

और संबंधित विधि कब्जा

https://developer.mozilla.org/en/DOM/document.releaseCapture

तो जारी करने के लिए, यह कैप्चरिंग घटना मॉडल के साथ आम में कुछ भी नहीं है और, वहाँ यह अनुकरण करने के लिए कोई ज्ञात तरीका है एक मानक तरीके से इंटरनेट एक्सप्लोरर में!

उम्मीद है कि इससे मदद मिलती है!

3

Uniform Event Model जावास्क्रिप्ट लैब से प्रोजेक्ट कैप्चर चरण का अनुकरण करने के लिए प्रतीत होता है। the download page for the JSLab DOM Correction library पर जाएं और सब कुछ चुनें और टिप्पणी प्रारूप का चयन करें। फिर कोड डाउनलोड करें और इसे 'कैप्चर' शब्द के लिए खोजें। मैंने पुस्तकालय का परीक्षण नहीं किया है या इसके अधिकांश कोड को पढ़ा है।

0
function myFunction(e) { 
    if (!e) var e = window.object;//legacy event object 
    if (e.preventDefault) e.preventDefault();//prevent firing in W3C model 
    return false; //exit event, no firing, listener must registered to anchor tag 
}  
var x = document.getElementsByTagName("A"); 

if (x.item(0).addEventListener) { 
    for (var i = 0, l = x.length; i < l; i++) { 
     x.item(i).addEventListener("click",myFunction,false); 
    } 
}//W3C model 
else if (x.item(0).attachEvent) { 
    for (var i = 0, l = x.length; i < l; i++) { 
     x.item(i).attachEvent("onclick",myFunction); 
     } 
    }// legacy browsers 
0

सबसे अच्छा तरीका है अगर आप केवल क्लिक के लिए बुदबुदाती का उपयोग करें:

if (document.addEventListener) document.addEventListener("click", function(e){e.preventDefault();},false); 
else if (document.attachEvent) document.attachEvent("onclick", function(){window.event.returnValue = false;});