मैं फ़ायरफ़ॉक्स में Event.srcElement कैसे काम कर सकता हूं और इसका क्या मतलब है?


80

मेरी कंपनी की वेबसाइट पर एक स्टेटमेंट है जो फ़ायरफ़ॉक्स के साथ एक वेब पेज को असंगत बनाता है

if(event.srcElement.getAttribute("onclick") == null){ 
...code..
document.mainForm.submit();
}

मैंने टिप्पणी की है कि क्या बयान की स्थिति है और अब यह पूर्वोक्त के साथ काम कर रहा है। मेरा सवाल यह है कि क्या event.srcElement.getAttribute ("onclick") है, क्या यह महत्वपूर्ण है, क्या यह भविष्य में समस्या पैदा करेगा। भी, वहाँ कुछ इसी तरह की स्थिति मैं बदल सकता है ताकि यह फ़ायरफ़ॉक्स पर काम करता है?

संपादित करें:

 function gotoRDManagerPT(PTId, bDDetailId) {
        if(!proceed()) return false;
        var target = event.target || event.srcElement; 
        if(event.target.getAttribute("onclick") == null) { 
            document.mainForm.displayRDManagerPT.value = "true";
            document.mainForm.PTId.value = PTId;
            document.mainForm.bDDetailId.value = bDDetailId;
            document.mainForm.submit();
        }
    }

2
"Event.srcElement" की त्वरित Google खोज ने इस स्पष्टीकरण और समाधान को जन्म दिया
ऑर्बिट

जवाबों:


172

srcElementमालिकाना संपत्ति मूल रूप से IE से आ रही है। मानकीकृत संपत्ति है target:

var target = event.target || event.srcElement;

if(target.onclick == null) { // shorter than getAttribute('onclick')
    //...
    document.mainForm.submit();
}

Quirksmode.org पर भी एक नज़र डालें - अधिक क्रॉस ब्राउज़र जानकारी के लिए इवेंट गुण


सवाल के बारे में कि यह क्या कर रहा है:

event.target/ event.srcElementउस तत्व का संदर्भ शामिल है जिस eventपर उठाया गया था। getAttribute('onclick') == nullजाँच करता है कि एक क्लिक ईवेंट हैंडलर इनलाइन ईवेंट हैंडलिंग के माध्यम से तत्व को सौंपा गया है या नहीं ।

क्या यह महत्वपूर्ण है? हम नहीं कह सकते क्योंकि हम नहीं जानते कि क्या ...code..कर रहा है।


उस फेलिक्स के लिए धन्यवाद, हालांकि मुझे अभी भी एक जावास्क्रिप्ट त्रुटि मिली है "घटना अपरिभाषित है [इस त्रुटि पर ब्रेक] var लक्ष्य = window.event.target || event.srcElement?" कोई विचार क्यों?
कोड ५११ 'code code४६५५४१४४४१

1
@ user521180: अन्य सभी ब्राउज़रों में, windowईवेंट हैंडलर के लिए पहली दलील के रूप में पारित नहीं किया गया है। तो आपको कुछ ऐसा चाहिए function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}। या उस कोड को पोस्ट करें जहां यह निहित है यदि आपको अधिक सहायता की आवश्यकता है।
फेलिक्स क्लिंग

मैंने पूरे समारोह को शामिल करने के लिए अपने मूल पोस्ट को
संपादित किया है

1
@FelixKling मुझे लगता है कि अब केवल FF Event.srcElement
एलेक्स चार

1
इसे अद्यतन किया जाना चाहिए। आप सही हैं, @ फेलिक्सक्लिंग। Event.srcElement अब केवल फ़ायरफ़ॉक्स में असमर्थित है। developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
स्लिमपीडीएक्सएक्स

5

IE में ईवेंट ऑब्जेक्ट पहले से ही विंडो ऑब्जेक्ट में उपलब्ध है; फ़ायरफ़ॉक्स में, यह ईवेंट हैंडलर में एक पैरामीटर के रूप में पारित किया गया है।

उदाहरण

जावास्क्रिप्ट:

function toDoOnKeyDown(evt)

{

    //if window.event is equivalent as if thie browser is IE then the event object is in window
    //object and if the browser is FireFox then use the Argument evt

    var myEvent = ((window.event)?(event):(evt));
    //get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    //To Do -->

}

HTML:

<input type="text" id="txt_Name" onkeydown="toDoOnKeyDown(event);"/>

जैसा कि आपने देखा कि जब हमने HTML के अंदर फ़ंक्शन को कॉल किया था तो हमने eventब्राउज़र फ़ायरफ़ॉक्स के मामले में एक पैरामीटर जोड़ा है।

मैंने एक लेख में पढ़ा है कि IE में ईवेंट ऑब्जेक्ट कहा जाता है window.eventऔर फ़ायरफ़ॉक्स में हमें इसे एक पैरामीटर के रूप में रखना होगा।

मामले में आपको इसे कोड में संलग्न करने की आवश्यकता है:

document.getElementById('txt_Name').onkeydown = function(evt) {
    var myEvent = ((window.event)?(window.event):(evt));


    // get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    // To Do -->
};

1
यहाँ संपादित नईम के लिए धन्यवाद :) फिर से धन्यवाद
Marwan

क्या होगा यदि आप पहले से ही इस समारोह में एक और मूल्य पारित कर रहे हैं? क्या आप दूसरे पैरामीटर के रूप में "evt" जोड़ते हैं? जावास्क्रिप्ट तब कैसे पता चलता है कि कौन सा पैरामीटर ईवेंट ऑब्जेक्ट है? क्या यह पहला पैरामीटर होना चाहिए? या आखिरी?
विंसेंट

0

निम्नानुसार त्वरित सुधार का प्रयास करें:

कोड में शामिल करें:

let target = event.target || event.srcElement;

और बदल जाते हैं

event.srcElement.XXXXX to target.XXXXX

यह फ़ायरफ़ॉक्स के साथ समस्या को हल करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.