2012-10-05 21 views
7

कुछ ब्राउज़र आपको एक ऐसी घटना को फिर से प्रेषित करने की अनुमति नहीं देंगे जो पहले से ही प्रेषित हो चुका है, लेकिन मौजूदा ईवेंट ऑब्जेक्ट से प्राप्त किए जा सकने वाले मानों के आधार पर आपको नई ईवेंट ऑब्जेक्ट्स बनाने की अनुमति मिलती है।एक जावास्क्रिप्ट इवेंट ऑब्जेक्ट क्लोन करने का सबसे अच्छा तरीका क्या है जिसे इसे फिर से प्रेषित किया जा सकता है?

क्या कोई सामान्य और पुन: प्रयोज्य समाधान है जो किसी भी घटना प्रकार के साथ काम करेगा, या उसमें असफल होगा, एक विशिष्ट घटना प्रकार के लिए ऐसा करने का एक तरीका (मेरे मामले में मैं वर्तमान में mousewheel ईवेंट से संबंधित हूं)?

+0

आप 'element.dispatchEvent (अपने माउसव्हील घटना)' कोशिश किया था? आपको 'createEvent()' के माध्यम से लगता है कि एक नया mousewheel घटना instanciate करने में सक्षम होना चाहिए। – Sebas

उत्तर

4

मैं विशेष रूप से कम से कम MouseEvents के लिए अपने खुद के जवाब मिल गया,:

target.dispatchEvent(evt); 
+0

क्या आप हमारे साथ 'ई' के मूल्य, क्लोनमोउसएवेंट के पैरामीटर को साझा कर सकते हैं? बेशक यह केवल वैल्यू * आपको चाहिए *, लेकिन यह अभी भी कुछ नुकसान से बचने में मदद कर सकता है ... – GameAlchemist

+0

भ्रम के लिए खेद है, 'ई' जावास्क्रिप्ट इवेंट ऑब्जेक्ट प्रारंभिक ईवेंट हैंडलर को पास किया गया है - यानी। मैं क्लोन करना चाहता हूँ। – devios1

1

आप उपयोग करने के लिए (खराब प्रलेखित कर सकते हैं:

function cloneMouseEvent(e) { 
    var evt = document.createEvent("MouseEvent"); 
    evt.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); 
    return evt; 
} 

फिर आप के साथ एक लक्ष्य पर घटना प्रेषण कर सकते हैं) NWEvents library

NW.Event.dispatch(target, e.type, false, e); 

किसी भी घटना के साथ काम करता है, और पुराने आईईएस में भी।

4

ऐसा लगता है कि initMouseEvent और अब जैसे ही बहिष्कृत हैं, ऐसा लगता है कि अब भी एक बेहतर समाधान है।

let my_event = new MouseEvent(`foo`, some_existing_mouse_event); 
dispatchEvent(my_event); 

घटनाओं के अन्य वर्गों के समान कंस्ट्रक्टर्स कि एक ही तरह से प्रयोग करने योग्य होना चाहिए: MouseEvent() निर्माता, उदाहरण के लिए, अपने दूसरे पैरामीटर, जिसके लिए आप एक मौजूदा MouseEvent वस्तु के रूप में उपयोग कर सकते हैं संपत्तियों की एक तालिका लेता है। जैसे ClipboardEvent()

jsfiddle example

+0

बहुत बढ़िया। यह मैंने देखा है सबसे अच्छा तरीका है। धन्यवाद। –

+0

उदाहरण के लिए इस विधि, लक्ष्य या वर्तमान लक्ष्य के साथ कुछ गुणों की प्रतिलिपि नहीं बनाई जा सकती है। – shuji

+0

@shuji आप इस प्रकार मान सेट कर सकते हैं: 'my_event.target = some_element' –