2012-03-19 17 views
113

में काम नहीं कर रहा है मैंने गतिशील रूप से एक चेकबॉक्स बनाया है। मैंने चेकबॉक्स के क्लिक पर फ़ंक्शन को कॉल करने के लिए addEventListener का उपयोग किया है, जो Google क्रोम और फ़ायरफ़ॉक्स में काम करता है लेकिन इंटरनेट एक्सप्लोरर 8 में काम नहीं करता है। यह मेरा कोड है:addEventListener IE8

var _checkbox = document.createElement("input"); 
_checkbox.addEventListener("click", setCheckedValues, false); 

setCheckedValues मेरा ईवेंट हैंडलर है।

उत्तर

211

प्रयास करें:

if (_checkbox.addEventListener) { 
    _checkbox.addEventListener("click", setCheckedValues, false); 
} 
else { 
    _checkbox.attachEvent("onclick", setCheckedValues); 
} 

अपडेट :: पहले IE9 करने के लिए इंटरनेट एक्सप्लोरर संस्करण के लिए, attachEvent विधि, EventTarget इस पर कहा जाता है करने के लिए निर्दिष्ट श्रोता रजिस्टर करने के लिए इस्तेमाल किया जाना चाहिए दूसरों addEventListener के लिए इस्तेमाल किया जाना चाहिए।

+1

इसका विवरण क्यों उपयोग किया जाना चाहिए इसका उत्तर जवाब में सुधार होगा। – dkris

+0

@dkris ने एक स्पष्टीकरण के रूप में एक संक्षिप्त विवरण जोड़ा, मुझे उम्मीद है कि चीजों को थोड़ा स्पष्ट बनाता है .. :) –

43

आपको IE9 से पहले IE संस्करणों में attachEvent का उपयोग करना होगा। का पता लगाने के लिए कि क्या addEventListener परिभाषित किया गया है और attachEvent का उपयोग अगर यह नहीं है:

if(_checkbox.addEventListener) 
    _checkbox.addEventListener("click",setCheckedValues,false); 
else 
    _checkbox.attachEvent("onclick",setCheckedValues); 
//       ^^ -- onclick, not click 

ध्यान दें कि IE11 will remove attachEvent

यह भी देखें:

0

आप jQuery का उपयोग करते हैं तो आप लिख सकते हैं:

$(_checkbox).click(function(e){ /*process event here*/ }) 
2

mayb यह आसान है (और अधिक प्रदर्शन है) यदि आप उदाहरण अपनी मेज

$('idOfYourTable').on("click", "input:checkbox", function(){ 

}); 

इस तरह से करने के लिए घटना एक और तत्व को संभालने के प्रतिनिधि, आप केवल एक ईवेंट हैंडलर होगा, और यह भी काम करेंगे नए जोड़े गए तत्वों के लिए।

if (!someElement.addEventListener) { 
    _checkbox.attachEvent("onclick", setCheckedValues); 
} 
else { 
    _checkbox.addEventListener("click", setCheckedValues, false); 
} 
3

आईई addEventListener संस्करण 9 तक का समर्थन नहीं करता है, तो आप attachEvent उपयोग करने के लिए, यहाँ एक उदाहरण है यह भी सरल क्रॉसब्रोसर समाधान है:

var addEvent = window.attachEvent||window.addEventListener; 
var event = window.attachEvent ? 'onclick' : 'click'; 
addEvent(event, function(){ 
    alert('Hello!') 
}); 

'क्लिक के बजाय' क्लिक करें पाठ्यक्रम की कोई घटना हो सकती है।

13

: यह जरूरी है jQuery> = 1.7

प्रतिनिधि अन्यथा का उपयोग()

$('idOfYourTable').delegate("input:checkbox", "click", function(){ 

}); 
+0

+1, मुझे लगता है कि यह एक स्मार्ट कामकाज है! 'addEventListener' का तीसरा तर्क वैसे भी वैकल्पिक है, इसलिए यह एक अच्छा समाधान हो सकता है, और यदि यह अन्य शाखाओं की तुलना में अच्छा है। लेकिन इस मामले में, '_checkbox' लक्ष्य तत्व है, न कि 'विंडो'। :) तो हो सकता है कि आप एक ऐसा फ़ंक्शन बना सकें जहां ईवेंट लक्ष्य एक और तर्क हो। – Sk8erPeter

+0

ओह, मैंने बहुत जल्दी उठाया ... :) यदि मैं ईवेंट लक्ष्य तत्वों '' addEventListener' कॉल को उपनाम करने का प्रयास करता हूं तो मुझे क्रोम में _ "TypeError: अवैध आमंत्रण" _ मिलता है - यह विषय देखें: http://stackoverflow.com/प्रश्न/1007340/जावास्क्रिप्ट-समारोह अलियासिंग-does not है-लग रहे करने के लिए काम करते हैं। तो 'विंडो' ऑब्जेक्ट के लिए, यह सही तरीके से काम करता है, लेकिन दस्तावेज़ के अंदर अन्य नोड्स के लिए काम नहीं करता है। इस तरह आपके सुझाए गए एलियासिंग मूल प्रश्न में उल्लिखित मामले के लिए सही नहीं है! आपका कामकाज क्या होगा? – Sk8erPeter

2

आप सबसे बातों के लिए घटनाओं को जोड़ने लेकिन ध्यान दें XMLHttpRequest if (el.attachEvent) के लिए कि IE8 में असफल हो जायेगी करने addEvent नीचे() फ़ंक्शन का उपयोग, क्योंकि यह XMLHttpRequest.attachEvent() का समर्थन नहीं करता है ताकि आप के बजाय XMLHttpRequest.onload = function() {} उपयोग करने के लिए हो सकता है।

function addEvent(el, e, f) { 
    if (el.attachEvent) { 
     return el.attachEvent('on'+e, f); 
    } 
    else { 
     return el.addEventListener(e, f, false); 
    } 
} 

var ajax = new XMLHttpRequest(); 
ajax.onload = function(e) { 
} 
2

मैं एक त्वरित polyfill ऊपर उत्तरों के आधार के लिए चुना गया है:

//# Polyfill 
window.addEventListener = window.addEventListener || function (e, f) { window.attachEvent('on' + e, f); }; 

//# Standard usage 
window.addEventListener("message", function(){ /*...*/ }, false); 
बेशक

, इस से ऊपर जवाब की तरह सुनिश्चित नहीं है कि window.attachEvent मौजूद है, या नहीं हो सकता जो एक मुद्दा।

0
if (document.addEventListener) { 
    document.addEventListener("click", attachEvent, false); 
} 
else { 
    document.attachEvent("onclick", attachEvent); 
} 
function attachEvent(ev) { 
    var target = ev.target || ev.srcElement; 
    // custom code 
} 
+3

यह दिखाने के लिए कहीं बेहतर है कि कोड का अर्थ क्या है या कुछ नोट्स जोड़ें। धन्यवाद – toha