2009-04-21 12 views
7

पर ऑनक्लिक ईवेंट को अनुमति नहीं दे रहा है मुझे इंटरनेट एक्सप्लोरर के साथ समस्याएं आ रही हैं। मेरे पास एक लिंक है जो एक फॉर्म पर फ़ाइल अपलोड तत्व को डुप्लिकेट करता है। कोड जो डुप्लीकेट करता है, डुप्लिकेट किए गए अपलोड तत्व को हाइपरलिंक भी जोड़ता है जिसे डुप्लिकेट तत्व को हटाना है, इस लिंक को सरल बनाएं।आईई गतिशील रूप से बनाए गए DOM 'a' तत्व

समस्या यह है कि यह कोड फ़ायरफ़ॉक्स में ठीक चलाता है लेकिन यह IE में बिल्कुल नहीं चलता है। भूल जाओ कि कोड कैसे लिखा गया है - ऑनक्लिक घटना जो मैं तत्व से जुड़ा हूं, बिल्कुल भी आग नहीं है!

मैं समारोह में इस तरह मेरी निकालें लिंक तत्व बना रहा हूं:

var a = document.createElement('a'); 
a.setAttribute('href', "javascript:void(0);"); 
a.setAttribute('class', 'delete'); 
a.setAttribute('onClick', 'removeThisElement(idOfParentContainer, this)'); 

container.appendChild(a); 

यह फ़ायरफ़ॉक्स में ठीक काम करता है, लेकिन यह IE में सब पर आग नहीं करता है। मैंने आईई इंस्पेक्टर का उपयोग करके डोम की जांच की और लिंक अच्छी तरह से प्रस्तुत किया गया है, हालांकि उससे जुड़ी कक्षा को प्रस्तुत या लागू नहीं किया गया है और न ही घटना को निकाल दिया गया है, भले ही इसे एचटीएमएल पर लिंक में शारीरिक रूप से जोड़ा गया हो। किसी कारण से ऑनक्लिक घटना भी फ़ायरिंग नहीं कर रही है इससे कोई फर्क नहीं पड़ता कि मैंने इसमें क्या कोड डाला है, भले ही यह एक चेतावनी हो। क्या मुझसे कोई चूक हो रही है। :(


महान मुद्दा तथापि AddEvent का उपयोग करके ईवेंट संलग्न द्वारा हल का हिस्सा एक मिल क्यों सीएसएस प्रतिपादन मैं कक्षा तत्व से जुड़ी कुछ अजीब कारण के लिए बिल्कुल भी प्रस्तुत नहीं होती, इसका मतलब यह नहीं है :(


अच्छा सलाह वास्तव में -। मैं अपने कोड को फिर से लिखने रहा हूँ setAttribute समारोह से बचने के लिए और बदले में jQuery के लिए यह सब डोम हेरफेर पोर्टिंग धन्यवाद लोग

उत्तर

8

घटना संचालकों डोम का श्रेय नहीं कर रहे हैं, में मदद करता है के लिए विशेषता मार्कअप में मौजूद है केवल - मुझे यकीन नहीं है कि एफएफ यह क्यों कहता है। मैं अनुसंधान करूँगा जो अब मैं जानना चाहता हूं।

अद्यतन: घटनाओं के बारे में मिश्रित भावनाएं प्रतीत होती हैं कि घटनाएं डीओएम-मान्य गुण हैं या नहीं। मुझे ऐसा लगता है कि यह एमएस की गलती है क्योंकि वे आंतरिक रूप से उन्हें विशेषताओं के रूप में नहीं मानते हैं, जबकि एचटीएमएल स्पेक इंगित करता है कि वे बहुत अधिक हैं। इसका सीधा परिणाम यह है कि कई चीजें हैं! आईई विचार करेगा कि आईई में सेट एट्रिब्यूट के साथ इवेंटहाइंडर बाइंडिंग और महत्वपूर्ण रूप से शैली, कक्षा और नाम शामिल हैं। जाहिर है आईई 8 इसे ठीक करता है लेकिन मैंने अभी भी इसे इंस्टॉल नहीं किया है इसलिए मैं जांच नहीं कर सकता।

इस बीच, घटना बाध्यकारी के लिए addEventListener/attachEvent जोड़ी का उपयोग करें, या (कम प्राथमिकता से क्योंकि यह प्रत्यक्ष असाइनमेंट है) सीधे सेट करें। सीधे अपनी लक्ष्य विधि (या आपकी विधि पर बंद होने की संभावना) पर क्लिक करें।

अपनी स्टाइल को ठीक से लागू नहीं करने के लिए element.style = foo; या (बेहतर) element.className = bar का उपयोग करें।

अनिवार्य रूप से समस्या सेट है। इसका उपयोग करने से बचें।

For reference...

+0

वाह करते हैं! तो इसका मतलब है कि इस बार फ़ायरफ़ॉक्स में यह गलत है! लेकिन मैं एक फ़ंक्शन कैसे संलग्न करूं जिसमें मैं पैरामीटर पास करना चाहता हूं - हालांकि मुझे ऐसा कोई उदाहरण दिखाई नहीं दे रहा है। – Ali

+1

एफएफ * गलत हो सकता है, मैं अभी भी उस पर देख रहा हूं। आप प्रभावी रूप से बंद होने का उपयोग करके पैरा को पास कर सकते हैं: पिम दिखाता है कि यह कैसा दिख सकता है, आपके कोड को और देखे बिना सुनिश्चित नहीं हो सकता है, लेकिन अधिक जानकारी के लिए Google "जावास्क्रिप्ट बंद करें"। – annakata

+1

मुझे इसे पैरामीटर के साथ काम करने के लिए मिला - लेकिन अभी भी यह जानना अच्छा लगेगा कि मैं इसे कैसे संभालेगा, मुझे ईवेंट से जुड़े फ़ंक्शन को पैरामीटर पास करने की आवश्यकता होनी चाहिए। इसके अलावा मुझे समझ में नहीं आ रहा है कि क्यों सीएसएस और शैलियों आईई पर प्रस्तुत नहीं करते हैं जैसा उन्हें करना चाहिए। – Ali

3

रूप annakata कहा था कि आप का उपयोग करना चाहिए addEventListener/attachEvent। लेकिन यदि आप स्थापित करने के लिए wan't onclick प्रत्यक्ष आप का उपयोग कर सकते हैं:

a.onclick = function() { removeThisElement(idOfParentContainer, this); }; 
+0

fwiw, मैंने कोड प्रदान नहीं किया क्योंकि ओपी या तो नहीं था:) मुझे नहीं पता कि "यह" या "idOfParentContainer" क्या है, इसलिए मैं यह नहीं कह सकता कि वह बंदरगाह काम करेगा या नहीं। – annakata

0

वास्तव में, क्रॉस-ब्राउज़र प्रयोजनों के लिए, यह बेहतर Jquery उपयोग करने के लिए है।

$('#exampleCA').createAppend("a", { href: '#', style: "background-color: red;", onclick: 'alert (1);' }, "aaabbb"); 

यह टेक्स्ट aaabbb, href = "#", लाल पृष्ठभूमि और क्लिक के लिए अलर्ट ईवेंट के साथ टैग बनाएगा।

0

आप देख रहे हैं एक पुन: प्रयोज्य के लिए, एक्स-ब्राउज़र समाधान, निम्नलिखित समारोह आईई, एफएफ और ओपेरा के लिए काम करता है:

function addEvent(obj, type, fn) { 
    if (obj.attachEvent) { 
     obj['e'+type+fn] = fn; 
     obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
     obj.attachEvent('on'+type, obj[type+fn]); 
    } else 
     obj.addEventListener(type, fn, false); 
    } 
1

बस इस

var element = document.createElement("input"); 
element.class = "className"; 
element.style.display = "none"; 
element.style.position = "absolute"; 
element.id = "someid"; 
element.type = "file"; 
element.onchange = function(){ 
        // do onchange functions here 
        } 
// do the following that removes all browser dependecies 
$(document.body).append(element); 
$("#someid").click(); //click the button programatically using its id 
$(element).remove(); // remove the element 
संबंधित मुद्दे