बहुत अधिक विस्तार में जाने के बिना इस तरह फ़ंक्शन को कॉल करें, मैं रोलओवर के साथ एक img था, यानी माउसआउट/ओवर जो छिपे हुए फॉर्म मानों में img src सेट करते हैं (या यह gloabl चर के साथ एक अलग संदर्भ में किया हो सकता है)। मैंने अपने दोनों ओवर/आउट छवि मानों को स्वैप करने के लिए कुछ जावास्क्रिप्ट का उपयोग किया और मैंने फायरएवेंट (एलिमेंटआईडी, "माउसओवर") कहा जाता है; परिवर्तन को ट्रिगर करने के लिए। मेरा जावास्क्रिप्ट पेज पर तत्व छुपा रहा/प्रदर्शित कर रहा था। इसने कर्सर को कभी-कभी आईएमजी से अधिक होने का कारण बना दिया, जिसका उपयोग मैंने ईवेंट को ट्रिगर करने के लिए किया था - जो कि मैं स्वैपिंग के समान था, और कभी-कभी कर्सर क्लिक के बाद आईएमजी पर नहीं था।
माउसओवर/आउट तब तक आग नहीं लगाता जब तक कि आप किसी तत्व से बाहर निकलें और पुनः दर्ज न करें, इसलिए मेरी घटना के बाद माउसओवर/आउट को नई कर्सर स्थिति के लिए "retriggering" की आवश्यकता होती है। मेरा समाधान यहाँ है। जब मैं विभिन्न पेज तत्वों को छुपा/प्रदर्शित करता हूं, और वर्णित के रूप में अपना img src swapping करने के बाद, मैं FireEvent (ElementId, "mouseover") के बजाय फ़ंक्शन RefreshMouseEvents (ElementId) को कॉल करता हूं।
यह आईई 9 में काम करता है (अन्य ब्राउज़रों के बारे में निश्चित नहीं है)।
function RefreshMouseEvents(ElementId)
{
FireEvent(ElementId, 'mouseover');
setTimeout("TriggerMouseEvent('" + ElementId + "')" , 1);
}
function TriggerMouseEvent(ElementId)
{
if(IsMouseOver(ElementId, event.clientX, event.clientY))
FireEvent(ElementId, 'mouseover');
else
FireEvent(ElementId, 'mouseout');
}
function IsMouseOver(ElementId, MouseXPos, MouseYPos)
{
if(document.getElementById(ElementId) != null)
{
var Element = document.getElementById(ElementId);
var Left = Element.getBoundingClientRect().left,
Top = Element.getBoundingClientRect().top,
Right = Element.getBoundingClientRect().right,
Bottom = Element.getBoundingClientRect().bottom;
return ((MouseXPos >= Left) && (MouseXPos <= Right) && (MouseYPos >= Top) && (MouseYPos <= Bottom))
}
else
return false;
}
function FireEvent(ElementId, EventName)
{
if(document.getElementById(ElementId) != null)
{
if(document.getElementById(ElementId).fireEvent)
{
document.getElementById(ElementId).fireEvent('on' + EventName);
}
else
{
var evObj = document.createEvent('Events');
evObj.initEvent(EventName, true, false);
document.getElementById(ElementId).dispatchEvent(evObj);
}
}
}
आप jQuery बाँध –
आप इस की कोशिश की है उपयोग कर सकते हैं: यहाँ प्रतीत होता है सिद्ध संस्करण (फिर से केवल IE9 परीक्षण किया) है? पेरेंट इवेंट पर ऑनहाउसओवर इवेंट _should_ आग भी घटना प्रसार के लिए धन्यवाद। –
ठीक है, मैंने इसके बारे में नहीं सोचा था, माफ करना यह थोड़ा बुरा उदाहरण है क्योंकि मेरे ऐप में वे वास्तव में घोंसला वाले तत्व नहीं हैं। शीर्ष div पूरी तरह से कई अन्य तत्वों पर स्थित है। – fearofawhackplanet