javascript इंटरनेट एक्सप्लोरर और जावास्क्रिप्ट घटना वर्तमान लक्ष्य



internet-explorer events (11)

संक्षिप्त जवाब है: jQuery का प्रयोग करें।

यद्यपि event.currentTarget IE पर पहुंच योग्य नहीं है, jQuery आपके लिए ईवेंट को सामान्यीकृत करेगा ताकि आपका कोड IE पर भी काम करेगा (जैसा कि here बताया गया here )

ध्यान दें कि event.srcElement का उपयोग event.srcElement , जैसा कि अन्य उत्तरों में सुझाया गया है , समकक्ष नहीं है, क्योंकि srcElement target अनुरूप है, वर्तमान target लिए नहीं, जैसा कि quirksmode.org/js/events_order.html के अंत में बताया गया है।

क्या आईई 7 या 8 के साथ किसी ईवेंट का वर्तमान लक्ष्य लेने का कोई तरीका है?

अन्य ब्राउज़र (फ़ायरफ़ॉक्स, ओपेरा, क्रोम इत्यादि) के साथ हम event.currentTarget उपयोग कर सकते हैं या हम ईवेंट को प्रसंस्करण करने वाले ऑब्जेक्ट को संदर्भित करने के लिए this कीवर्ड का उपयोग भी कर सकते हैं।

लेकिन इंटरनेट एक्सप्लोरर में हमारे पास currentTarget संपत्ति नहीं है और this विंडो ऑब्जेक्ट को संदर्भित करता है!

तो मैं यह कैसे कर सकता हूँ?


Answer #1

इंटरनेट एक्सप्लोरर 6 - 8 event.currentTarget लागू नहीं करते हैं।

मोज़िला डेवलपर नेटवर्क से उद्धरण:

इंटरनेट एक्सप्लोरर 6 से 8 पर, इवेंट मॉडल अलग है। ईवेंट श्रोताओं को गैर-मानक तत्व .attachEvent विधि से जोड़ा जाता है। इस मॉडल में, event.currentTarget के बराबर नहीं है और यह वैश्विक वस्तु है। Event.currentTarget सुविधा का अनुकरण करने का एक समाधान है अपने हैंडलर को फ़ंक्शन में प्रोक्शन के साथ हैंडलर को फ़ंक्शन.प्रोटोटाइप.call का उपयोग करके पहले तर्क के रूप में लपेटना है। इस तरह, यह अपेक्षित मूल्य होगा।

यदि आप किसी भी तरह jQuery का उपयोग करते हैं, तो jQuery ईवेंट ऑब्जेक्ट और इसकी गुणों को सामान्य करने की देखभाल करता है (जैसा कि अन्य उत्तरों में कई बार बताया गया है)। JQuery एपीआई दस्तावेज़ों से उद्धरण:

jQuery की घटना प्रणाली W3C मानकों के अनुसार ईवेंट ऑब्जेक्ट को सामान्यीकृत करती है।


Answer #2

मुझे लगता है कि आप 'इस' संदर्भ का उपयोग करना चाहते हैं क्योंकि एक ही हैंडलर बहुउद्देश्यीय वस्तुओं के साथ काम करेगा। उस स्थिति में, quirksmode रिकोडिंग प्रतियोगिता से उत्कृष्ट AddEvent स्क्रिप्ट देखें। ( http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html )। इस कोड ने मुझे अपने जावास्क्रिप्ट को एचटीएमएल से बाहर करने की अनुमति दी है। सबसे महत्वपूर्ण बात यह है कि, मैंने परीक्षण किए गए सभी ब्राउज़रों पर काम करना प्रतीत होता है। सरल और कॉम्पैक्ट।


Answer #3

अतिरिक्त नोट: कभी-कभी IE (जैसे यानी 7) event.target के लिए अपरिभाषित हो जाएगा, इसलिए यह इसे वास्तविक या गलत के रूप में भी मूल्यांकन नहीं करेगा (चाहे एक या टर्नरी ऑपरेटर में)। इसके अलावा, भले ही आप typeof event.target == 'undefined' करने का प्रयास करें, फिर भी यह कहने में त्रुटि होगी "event.target अपरिभाषित है।" निश्चित रूप से बेवकूफ है क्योंकि आप यही परीक्षण कर रहे हैं।
जाहिर है यह पुरानी आईई में कार्यों को पारित करने में एक समस्या है। इसे ठीक करने के लिए आप क्या करते हैं:

event = event ? event : window.event;
if (typeof event.target == 'undefined') {
    var target = event.srcElement;
    } else {
    var target = event.target;
    }

ध्यान दें कि आप मानक अनुपालन ब्राउज़र में ईवेंट को फिर से लिखते हैं और आईई के लिए वैश्विक घटना को पकड़ते हैं।


Answer #4

आप कुछ ऐसा कर सकते हैं

target = (event.currentTarget) ? event.currentTarget : event.srcElement;

यद्यपि @Marc ने उल्लेख किया है कि आप एक JQuery फ्रेमवर्क का उपयोग कर सकते हैं जो आपके लिए ईवेंट को सामान्य करता है।


Answer #5

मैं एक और सरल जवाब देना चाहता हूं, इसका मांस अनास में मांस और उपयोगकर्ता 1515360 के उत्तरों जैसा ही है:

if (browserDoesNotUnderstandCurrentTarget) {
        someElement.onclick = function (e) {
                if (!e) { var e = window.event; }
                e.currentTarget = someElement;
                yourCallback(e);
        }
}
else {
        someElement.onclick = yourCallback;
}

जो कुछ भी आप चाहते हैं उसके लिए क्लिक करें।

यह e.currentTarget उन ब्राउज़रों पर उपलब्ध कराता है जो वर्तमान लक्ष्य का समर्थन नहीं करते हैं।


Answer #6

प्रोटोटाइप जेएस के साथ आप इसका उपयोग कर सकते हैं:

var target = Event.element(event);

Answer #7

अच्छी तरह से मुझे यकीन नहीं है लेकिन यह एक समाधान हो सकता है: चूंकि srcElement द्वारा दिए गए बच्चे तत्व को कोई ईवेंट नहीं माना जाता है क्योंकि यह मूल तत्व पर ईवेंट के साथ हस्तक्षेप करेगा और न ही शीर्ष तत्व से पहले कोई अन्य ऊपरी तत्व जहां ईवेंट स्टेटमेंट (जैसे onmosedown = "") तो यह कोड है:

if (!event) event = window.event; 
if (event.currentTarget) element = event.currentTarget; 
else{element = event.srcElement; while(element.onmousedown==null) element = element.parentNode;}
if(element.nodeType==3) element=element.parentNode;  // defeat Safari bug

ऐसा लगता है कि अब तक मेरे साथ ठीक काम करने लगता है अगर आपको कोई समस्या मिलती है तो कृपया मुझे सही करें, मुझे इसके लिए एक समाधान की आवश्यकता है, मैं jquery का उपयोग नहीं करना चाहता ..


Answer #8

मुझे भी इसी तरह की समस्या थी। मैंने brainjar.com पर एक लेख में बताए गए कीवर्ड का उपयोग करके हल किया

IE में वर्तमान लक्ष्य गुण के बराबर प्राप्त करने के लिए, टैग में ईवेंट हैंडलर सेट करते समय इस कीवर्ड को तर्क के रूप में उपयोग करें।

...

फंक्शन myHandler (घटना, लिंक) {...}

उसी पृष्ठ पर आप निम्न तालिका पा सकते हैं:


Answer #9

यह फ़ंक्शन currentTarget के मामले में currentTarget लक्ष्य बनाता है, इसलिए अब आपको अपना कोड पैच करने की आवश्यकता नहीं है!

function eventListener(e,t,f) {
   if(e.addEventListener)
       e.addEventListener(t,f);
   else
       e.attachEvent('on' + t,
                     function(a){
                         a.currentTarget = e;
                         f(a);
                     });
}

नियमित जेएस (9 से नीचे आईई पर काम नहीं करेगा):

function myfunction(e) {
    alert(e.currentTarget.id);
}

e = document.getElementById('id');
e.AddEventListener(e,'mouseover',myfunction);

इस समारोह के साथ (9 से नीचे आईई पर काम करेगा):

function myfunction(e) {
    alert(e.currentTarget.id);
}
e = document.getElementById('id');
eventListener(e,'mouseover',myfunction);

Answer #10

इस फ़ंक्शन के साथ आप श्रोता में जोड़ते समय इसे प्राप्त कर सकते हैं। इसके बारे में समस्या यह है कि आपके पास eventlistener के रूप में एक अनाम कार्य है और क्रियालेख में आप एक अनाम श्रोता को हटा नहीं सकते हैं। डुनो बोउट जेएस।

addEvent:function(object,type,listener,param)
    {
    if(object.addEventListener)
      object.addEventListener(type, function(e){ listener(object, e, param);}, false );
    else
    if(object.attachEvent)
      object.attachEvent('on'+type, function(e){ e = getEvent(e); listener(object, e, param);});
    },

getEvent:function(e)
        {
    if(!e) e = window.event; // || event
    if(e.srcElement) e.target = e.srcElement;
    return e;
    },

removeEvent:function(object,type,listener)
    {
    if(object.removeEventListener)
    object.removeEventListener(type, listener, false);
    else
    object.detachEvent('on'+type, listener);
    }

var div = document.getElementById('noobsafediv');
var div2 = document.getElementById('noobsafediv2');
addEvent(div,'mouseover',mouseover,['astring',111,div2]);


function mouseover(object,e,param)
 {
 console.log(object,e,param);
 }

यह मेरा ढांचा है और मैं इसे jNoob कहते हैं।





events