2012-05-16 9 views
10

मुझे यह छोटी समस्या है और मैं आपकी मदद के लिए अनुरोध कर रहा हूं। मैं इसबाल तत्व के साथ जावास्क्रिप्ट माउसओवर/माउसआउट समस्या

<div id="parent" onmouseover="MyFuncHover()" onmouseout="MyFuncOut()"> 
    <img id="child" src="button.png" style="visibility: hidden" /> 
</div> 

<script type="text/javascript"> 
    function MyFuncHover() { 
     // Here I have some code that makes the "child" visible 
    } 

    function MyFuncOut() { 
     // Here I have some code that makes the "child" invisible again 
    } 
</script> 

की तरह एक div तत्व है, जो अंदर मैं एक img तत्व है, के रूप में आप देख सकते हैं, छवि div का एक बच्चा है। मैं चाहता हूं कि जब मैं div छोड़ दूं, तो बच्चा गायब हो जाएगा। फिर भी, ऐसा लगता है कि जब मैं छवि पर माउस को ले जाता हूं, MyFuncOut() फ़ंक्शन को कॉल किया जाता है (क्योंकि, मुझे लगता है, मैं छवि को घुमाकर div छोड़ देता हूं)। मैं नहीं चाहता कि ऐसा हो। मुझे MyFuncOut() फ़ंक्शन केवल तभी कॉल किया जाना चाहिए जब मैं div क्षेत्र छोड़ दूं।

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

परिवर्तन

शाबाशी जब मैं बच्चे को "माउसआउट" करता हूं तो इवेंट बबलिंग माता-पिता को "माउसआउट" ईवेंट नहीं भेजेगी। जब मैं बच्चे को "माउसओवर" करता हूं तो यह "माउसओवर" ईवेंट को माता-पिता को भी नहीं भेजेगा। यही वह नहीं है जो मुझे चाहिए। जब मैं बच्चे को "माउसओवर" करता हूं तो मुझे माता-पिता के "माउसआउट" ईवेंट की आवश्यकता नहीं होती है। उसे ले लो? घटना बुलबुला उपयोगी है जब मैं नहीं चाहता, उदाहरण के लिए, बच्चे पर एक क्लिक घटना माता-पिता को प्रचारित करने के लिए, लेकिन यह मेरा मामला नहीं है। अजीब बात यह है कि मेरे पास एक ही माता-पिता के अंदर अन्य तत्व हैं जो माता-पिता के "माउसआउट" ईवेंट को आग नहीं देते हैं जब मैं उन्हें "माउसओवर" करता हूं।

उत्तर

22

आप "mouseenter" और "mouseleave" jQuery में उपलब्ध घटनाओं का उपयोग कर सकते हैं, यहाँ नीचे कोड, है

$(document).ready(function() { 
     $("#parent").mouseenter(function() { 
      $("#child").show(); 
     }); 
     $("#parent").mouseleave(function() { 
      $("#child").hide(); 
     }); 
    }); 

ऊपर, एक घटना को संलग्न करने के

<div id="parent"> 
    <img id="child" src="button.png" style="display:none;" /> 
</div> 
+1

मैं केवल जावास्क्रिप्ट के साथ करना चाहता हूं, वैसे भी, आखिरी समाधान हो सकता है। – ali

+0

वे प्रोटोटाइप में भी रास्ते में उपलब्ध हैं ... – user1856596

+0

हाँ! यह बहुत अच्छा काम करता है! : डी – Steffi

1

मुझे इसके साथ भी समस्याएं थीं और मैं इसे काम करने में सक्षम नहीं हूं। यही वह है जो मैंने इसके बजाय किया और यह बहुत आसान है और जावास्क्रिप्ट नहीं है इसलिए यह तेज़ है और इसे बंद नहीं किया जा सकता है।

div.container 
{ 
opacity:0.0; 
filter:alpha(opacity="00"); 
} 

div.container:hover 
{ 
opacity:1.0; 
filter:alpha(opacity="100"); 
} 

आप इसे अस्पष्टता के लिए सीएसएस 3 संक्रमण भी जोड़ सकते हैं ताकि इसे एक आसान अनुभव मिल सके।

+2

या बस इसे दृश्यता दें: सामान्य और दृश्यता पर छिपा हुआ: होवर पर दिखाई देता है। –

+0

मुझे आईई 6 पर भी काम करने की ज़रूरत है। धन्यवाद – ali

+0

यह आईई 6 –

3

बस जोड़ने के एक अगर आपके MyFuncOut कार्य करने के लिए बयान जो लक्ष्य की जाँच करता है छवि

if (event.target !== imageNode) { 
    imageNode.style.display = 'none' 
} 
नहीं है
+0

मुझे यह काम नहीं दिख रहा है, शायद मैं इसे अच्छी तरह कार्यान्वित नहीं कर रहा हूं। – ali

+0

यहां जिस विधि के बारे में बात कर रहा था उसका उपयोग करके http://jsfiddle.net/HvMjN/4/ एक डेमो है। यह पता चला है कि अधिक आधुनिक घटना माउसआउट और माउसेंटर के पास मूल रूप से अपेक्षित व्यवहार है ताकि आप अपने कोड का उपयोग केवल ईवेंट प्रकारों को बदल सकें http://jsfiddle.net/HvMjN/6/ – Jake

+0

धन्यवाद आदमी, केवल समस्या यह है कि यह नहीं करता आईई 6 पर काम नहीं करता है (त्रुटि: ऑब्जेक्ट संपत्ति या विधि 'addEventListener' का समर्थन नहीं करता है)। फिर भी, मुझे लगता है कि सीधे माता-पिता द्वारा हल किया जा सकता है। Onmouseover – ali

6

आप नीचे दिए गए समाधान का उपयोग कर सकते है, जो यह शुद्ध जावास्क्रिप्ट है और मैं सफलता के साथ प्रयोग किया जाता है।

var container = document.getElementById("container"); 
var mouse = {x: 0, y: 0}; 

function mouseTracking(e) { 
    mouse.x = e.clientX || e.pageX; 
    mouse.y = e.clientY || e.pageY; 
    var containerRectangle = container.getBoundingClientRect(); 

    if (mouse.x > containerRectangle.left && mouse.x < containerRectangle.right && 
      mouse.y > containerRectangle.top && mouse.y < containerRectangle.bottom) { 
     // Mouse is inside container. 
    } else { 
     // Mouse is outside container. 
    } 
} 
document.onmousemove = function() { 
    if (document.addEventListener) { 
     document.addEventListener('mousemove', function (e) { 
      mouseTracking(e); 
     }, false); 
    } else if (document.attachEvent) { 
     // For IE8 and earlier versions. 
     mouseTracking(window.event); 
    } 
} 

मुझे आशा है कि इससे मदद मिलती है।

+0

धन्यवाद ... मुझे लगता है कि यह बहुत अच्छा समाधान है क्योंकि इसे तत्वों के लिए गतिशील बाध्यकारी घटना के लिए addEventListener के साथ उपयोग किया जा सकता है – hoanganh17b

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