অ্যাডএভেন্টলিস্টনার আইই 8 তে কাজ করছেন না


118

আমি গতিশীলভাবে একটি চেকবক্স তৈরি করেছি। আমি addEventListenerচেকবক্সের ক্লিকে একটি ফাংশন কল করতে ব্যবহার করেছি , যা গুগল ক্রোম এবং ফায়ারফক্সে কাজ করে তবে ইন্টারনেট এক্সপ্লোরার 8 এ কাজ করে না । এটি আমার কোড:

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

setCheckedValues আমার ইভেন্ট হ্যান্ডলার

উত্তর:


215

চেষ্টা করুন:

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

আপডেট :: ইন্টারনেট 9 এক্সপ্লোরার সংস্করণগুলির জন্য, আই 9 এর পূর্বে, সংযুক্ত ইভেন্টটি যে ইভেন্টটিতে বলা হয়েছে তাতে নির্দিষ্ট শ্রোতাদের রেজিস্ট্রেশন করতে সংযুক্তিভেন্ট পদ্ধতিটি ব্যবহার করা উচিত , অন্যদের জন্য অ্যাডভেন্টলিস্টনার ব্যবহার করা উচিত।


1
কেন এটি ব্যবহার করা উচিত সে সম্পর্কে একটি বিবরণ উত্তরকে উন্নত করবে।
dkris

@ ডক্রিস একটি ব্যাখ্যা হিসাবে একটি সংক্ষিপ্ত বিবরণ যোগ করেছেন, আমি আশা করি বিষয়গুলি কিছুটা পরিষ্কার করে দেওয়া হয়েছে .. :)
সুধীর বাস্তকোটী

44

attachEventআইই 9 এর আগে আপনাকে আইই সংস্করণগুলিতে ব্যবহার করতে হবে । addEventListenerনির্ধারণ করা হয়েছে কিনা তা সনাক্ত করুন এবং attachEventএটি না থাকলে ব্যবহার করুন :

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

মনে রাখবেন যে আইই 11 সরিয়ে ফেলবেattachEvent

আরো দেখুন:


13

এটি সাধারণ ক্রসব্রোজার সমাধানও:

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

'ক্লিক' এর পরিবর্তে অবশ্যই কোনও ইভেন্ট হতে পারে।


+1, আমি মনে করি এটি একটি স্মার্ট workaround! addEventListenerএর তৃতীয় তর্কটি যাইহোক optionচ্ছিক, সুতরাং এটি একটি ভাল সমাধান হতে পারে, এবং এটি-অন্য শাখাগুলির চেয়ে ভাল। তবে _checkboxএক্ষেত্রে লক্ষ্য উপাদানটি নয়, নয় window। :) সুতরাং সম্ভবত আপনি এমন একটি ফাংশন তৈরি করতে পারেন যেখানে ইভেন্ট টার্গেটটি অন্য যুক্তি।
Sk8erPeter

ওহ, আমি খুব তাড়াতাড়ি উপড়ে ফেলেছি ... :) আমি ইভেন্টের টার্গেট এলিমেন্টের কলগুলিকে উপস্থাপন করার চেষ্টা করলে ক্রোমে আমি একটি "টাইপআরার: অবৈধ অনুরোধ"addEventListener পাই - এই বিষয়টি দেখুন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 1007340/… । সুতরাং windowবস্তুর জন্য, এটি সঠিকভাবে কাজ করে তবে ডকুমেন্টের অভ্যন্তরে অন্যান্য নোডের জন্য কাজ করে না। এইভাবে আপনার প্রস্তাবিত এলিয়াসিং মূল প্রশ্নের ক্ষেত্রে উল্লিখিত মামলার জন্য সঠিক নয়! আপনার কাজ কি হবে?
Sk8erPeter

3

আইই সমর্থন করে না addEventListener 9 ম সংস্করণ পর্যন্ত , তাই আপনাকে ব্যবহার করতে হবে attachEvent, এখানে একটি উদাহরণ রয়েছে:

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

2

আপনি যদি ইভেন্টটি হ্যান্ডলিংটিকে অন্য কোনও উপাদানকে হস্তান্তর করেন তবে উদাহরণস্বরূপ আপনার টেবিলটি ময়েব এটি সহজ (এবং আরও পারফরম্যান্স রয়েছে)

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

});

এইভাবে আপনার কাছে কেবল একটি ইভেন্ট হ্যান্ডলার থাকবে এবং এটি সদ্য যুক্ত হওয়া উপাদানগুলির জন্যও কাজ করবে। এর জন্য jQuery> = 1.7 প্রয়োজন

অন্যথায় প্রতিনিধি ব্যবহার করুন ()

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

});

2

আপনি বেশিরভাগ জিনিসের জন্য ইভেন্টগুলি যুক্ত করতে নীচের অ্যাডএভেন্ট () ফাংশনটি ব্যবহার করতে পারেন তবে নোট করুন যে এক্সএমএলএইচটিপিআরকুয়েস্ট আইই 8 এ if (el.attachEvent)ব্যর্থ হবে, কারণ এটি সমর্থন করে না 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
window.addEventListener = window.addEventListener || function (e, f) { window.attachEvent('on' + e, f); };

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

অবশ্যই, উপরের উত্তরগুলির মতো এটি নিশ্চিত করে না যে এটি window.attachEventবিদ্যমান, যা কোনও সমস্যা হতে পারে বা নাও হতে পারে।


0

আপনি jQuery ব্যবহার করে লিখতে পারেন:

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

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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.