2013-08-20 7 views
10

jsfiddleक्यों नहीं कर सकते एक mouseup घटना एक क्लिक करें घटना

<div class='wrapper'> 
    <button class='child'>Click me</button> 
</div> 

function h(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    e.stopImmediatePropagation(); 
    alert(e.type); 
    return false; 
} 

document.querySelector('.wrapper').addEventListener('mouseup', h, false); 
document.querySelector('.child').addEventListener('click', h, false); 

को रोकने मैं इस फायरिंग से घटना 'क्लिक' को रोकने के लिए उम्मीद है, लेकिन ऐसा नहीं है। हालांकि, mouseup से mousedown बदलना वास्तव में क्लिक ईवेंट को रोकता है।

मैंने useCapture तर्क को सही करने की भी कोशिश की है, और यह भी mouseup के साथ वांछित व्यवहार का उत्पादन नहीं करता है। मैंने क्रोम और फ़ायरफ़ॉक्स पर इसका परीक्षण किया है। बग फाइल करने से पहले, मुझे लगा कि मैं यहां पूछूंगा।

क्या यह वर्तमान ब्राउज़र में एक बग है, या यह दस्तावेज व्यवहार है?

मैंने W3C standard (DOM level 2) की समीक्षा की है, और मैं इस व्यवहार को समझाने में कुछ भी नहीं ढूंढ पाया, लेकिन मुझे कुछ याद आ सकता था।

मेरे विशेष मामले में, मैं कोड के दो टुकड़ों को रद्द करने की कोशिश कर रहा हूं जो एक ही तत्व पर घटनाओं को सुनते हैं, और मैंने उस हिस्से पर कैप्चर घटनाओं का उपयोग करके अनुमान लगाया है, जो प्राथमिकता को हल करने का सबसे शानदार तरीका होगा, लेकिन फिर मैं इस समस्या में भाग गया। एफडब्ल्यूआईडब्ल्यू, मुझे केवल एफएफ और क्रोम के आधिकारिक रूप से समर्थित संस्करणों का समर्थन करना है (एफएफ के लिए ईएसआर शामिल है)।

+0

'preventDefault' और 'stopImedimediPropagation' यहां अनावश्यक हैं (वैसे), क्योंकि कोई'

' नहीं है इसलिए बटन के साथ सबमिट नहीं किया जा रहा है, और उसी प्रकार की कोई भी ईवेंट नहीं है। और मुझे लगता है * यह व्यवहार की उम्मीद है क्योंकि 'क्लिक' से पहले 'माउसअप' आग नहीं है? तो '.child' की 'माउसअप' घटना अपने 'क्लिक' ईवेंट से पहले (और बुलबुले) आग लगती है (जिसे आपने रोक दिया है, लेकिन इससे कोई फर्क नहीं पड़ता) – Ian

+0

@Ian - मैंने यह सुनिश्चित करने के लिए जोड़ा कि मैंने ' टी जैसे टिप्पणियां प्राप्त करें "क्या आपने एक्स() या वाई() की कोशिश की है?"। आपकी दूसरी टिप्पणी के लिए, बच्चे से बुलबुले से पहले होने के लिए सच्ची ताकतों 'ट्रैपर' के माउसअप को 'उपयोग कैप्चर' सेट करना। मैंने इस कोड को शामिल नहीं किया, क्योंकि किसी भी मामले में, मुझे केवल एक चेतावनी() (एक अलग मूल तत्व के साथ) प्राप्त करना चाहिए, है ना? – tjameson

+0

यदि आप माउसक्लिक को रोकना चाहते हैं, तो इसका उपयोग करें: http://jsfiddle.net/zhAHt/9/ – uSeRnAmEhAhAhAhAhA

उत्तर

0

Check out this quirksmode article

click घटना:

आग एक mousedown और mouseup घटना में एक ही तत्व पर होते हैं जब।

तो जब माउस क्लिक जारी की है, दोनों mouseup और click घटनाओं निकाल दिया जाता है, clickmouseup कॉलबैक समाप्त होने की प्रतीक्षा नहीं करता है। लगभग हमेशा, mouseup और click समानार्थी रूप से उपयोग किया जा सकता है।

आदेश click रद्द करने के लिए की तरह आप का प्रदर्शन किया, आप falsemousedown घटना कॉलबैक जो कभी पूरा करने से click घटना से बचाता में लौट सकते हैं।

+5

यह गलत है, झूठी वापसी, o event.preventPropagation बंद हो जाएगा माउसअप लेकिन कोई क्लिक इवेंट नहीं। – eveevans

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