জাভাস্ক্রিপ্টে এমএসআইই এবং অ্যাডএভেন্টলিস্টনার সমস্যা?


85
document.getElementById('container').addEventListener('copy',beforecopy,false );

ক্রোম / সাফারিতে, যখন পৃষ্ঠার সামগ্রীটি অনুলিপি করা হচ্ছে তখন উপরেরগুলি "ফোরকপি" ফাংশনটি পরিচালনা করবে। এমএসআইই এই কার্যকারিতাটিও সমর্থন করবে বলে ধারণা করা হচ্ছে, তবে কোনও কারণে আমি এই ত্রুটিটি পাচ্ছি:

"বস্তু এই সম্পত্তি বা পদ্ধতি সমর্থন করে না"

এখন, এটা আমার বোঝা যে ইন্টারনেট এক্সপ্লোরার বডি নোডের সাথে খেলবে না, তবে আমি ভাবতাম আইডি দ্বারা নোড সরবরাহ করা ভাল কাজ করবে। আমি কী ভুল করছি সে সম্পর্কে কারও কি ধারণা আছে? আগাম ধন্যবাদ.

** যে কেউ আমাকে তৃতীয় প্যারামিটার "মিথ্যা" ভাল কি তা বলতে পারে তার জন্য বোনাস পয়েন্টস।


এখানে একটি ভাল নিবন্ধ যা ক্যাপচারের পর্বটি ব্যাখ্যা করে এবং useCaptureখুব ভালভাবে: coding.smashingmagazine.com/2013/11/12/…
ফিওলা

উত্তর:


186

আইইতে আপনাকে attachEventস্ট্যান্ডার্ডের চেয়ে ব্যবহার করতে হবে addEventListener

একটি সাধারণ অনুশীলন হ'ল addEventListenerপদ্ধতিটি উপলব্ধ কিনা তা পরীক্ষা করে এটি ব্যবহার করুন, অন্যথায় ব্যবহার করুন attachEvent:

if (el.addEventListener){
  el.addEventListener('click', modifyText, false); 
} else if (el.attachEvent){
  el.attachEvent('onclick', modifyText);
}

এটি করার জন্য আপনি একটি ফাংশন তৈরি করতে পারেন:

function bindEvent(el, eventName, eventHandler) {
  if (el.addEventListener){
    el.addEventListener(eventName, eventHandler, false); 
  } else if (el.attachEvent){
    el.attachEvent('on'+eventName, eventHandler);
  }
}
// ...
bindEvent(document.getElementById('myElement'), 'click', function () {
  alert('element clicked');
});

আপনি এখানে উপরের কোডের একটি উদাহরণ চালাতে পারেন ।

তৃতীয় যুক্তি addEventListenerহ'ল useCapture; যদি সত্যি, এটা নির্দেশ করে ব্যবহারকারী সূচনা শুভেচ্ছা যে ঘটনা ক্যাপচারিং


4
আমি আপনার প্রতিক্রিয়া প্রশংসা করি। আপনি যা পোস্ট করেছেন আমি কেবল তা চেষ্টা করেছি এবং এটি কার্যকর হয়েছে। যে জিনিসটি এখন আমাকে ফেলে দিচ্ছে তা হ'ল "অনুলিপি" ইভেন্টটি কাজ করছে না তবে "অনক্লিক" ইভেন্টটি। বিশেষত, এটি আশ্চর্যজনক কারণ কোয়ার্কস্মোড বলে যে এটি কাজ করা উচিত: quirksmode.org/dom/events/cutcopypaste.html কোনও ধারণা?
ম্যাট্রিম

সেই মন্তব্যটি স্ক্র্যাচ করুন। আপনি কেবল যা প্রেরণ করেছেন তা আমি বিচ্ছিন্ন করে দিয়েছি এবং অনুলিপি করতে ক্লিক করার ফলে কাজ হয়। আবার ধন্যবাদ.
ম্যাট্রিম

4
মাইক্রোসফ্টরের নিজস্ব ডকুমেন্টেশনগুলি addEventListenerতখন ব্যবহার করে কেন দেখায় ? এমএসডিএন.মাইক্রোসফট.এইন.ইউস
লিবারিয়ান

4
আমি বিশ্বাস করি, আইআই 9- তে @Wmarbut #EventListener যুক্ত হয়েছিল। সংযুক্তি আইটি ১১-তে সরানো হয়েছে আসল প্রশ্নটি ২০০৯ সালের। সিএমএস সঠিক, শক্তিশালী পদ্ধতি সরবরাহ করেছে যা আইই ১১ এর সাথেও কাজ করে চলেছে
কলিন ইয়ং

এটি ব্যাখ্যা করে যে এটি কেন ইন্টারনেটে কাজ করে তবে আমার জন্য ইন্ট্রানেটে নয়, কারণ আমার কাছে ইন্ট্রনেট সাইটের জন্য আমার সেটিংসটি সামঞ্জস্যতা মোডে সেট করা আছে।
রজার পারকিনস

32

আপনি যদি JQuery 2.x ব্যবহার করছেন তবে দয়া করে নীচে নিম্নলিখিতটি যুক্ত করুন

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge;" />
   </head>
   <body>
    ...
   </body>
</html>

এটি আমার পক্ষে কাজ করেছে।


4
আইই সংস্করণগুলি <= 8 চালিত তাদের ক্ষেত্রে এটি সমস্যার সমাধান করবে না।
নিনজানির

5

যোগ করার চেষ্টা করুন

<meta http-equiv="X-UA-Compatible" content="IE=edge"> 

খোলার মাথার ট্যাগের ঠিক পরে


4
আইই সংস্করণগুলি <= 8 চালিত তাদের ক্ষেত্রে এটি সমস্যার সমাধান করবে না।
নিনজানির

5

ইন্টারনেট এক্সপ্লোরার (আই 8 এবং নিম্ন) সমর্থন করে না addEventListener(...)attachEventপদ্ধতিটি ব্যবহার করে এর নিজস্ব ইভেন্টের মডেল রয়েছে । আপনি এর মতো কিছু কোড ব্যবহার করতে পারেন:

var element = document.getElementById('container');
if (document.addEventListener){
    element .addEventListener('copy', beforeCopy, false); 
} else if (el.attachEvent){
    element .attachEvent('oncopy', beforeCopy);
}

যদিও আমি আপনার নিজের ইভেন্ট হ্যান্ডলিং মোড়কে লেখা এড়াতে এবং পরিবর্তে একটি জাভাস্ক্রিপ্ট কাঠামো ব্যবহার করতে পরামর্শ দিই (যেমন jQuery , Dojo , MooTools , YUI , প্রোটোটাইপ , ইত্যাদি) এবং নিজের জন্য এটি তৈরি করতে এড়াতে এড়াতে চাই।

যাইহোক, ইভেন্টগুলির ডাব্লু 3 সি মডেলের তৃতীয় যুক্তি বুদবুদ এবং ইভেন্টগুলি ক্যাপচারের মধ্যে পার্থক্যের সাথে সম্পর্কযুক্ত । প্রায় প্রতিটি পরিস্থিতিতে আপনি ইভেন্টগুলি বুদবুদ হিসাবে হ্যান্ডেল করতে চাইবেন, যখন তারা বন্দী হবেন তখন নয়। পাঠ্য বাক্সগুলির জন্য "ফোকাস" ইভেন্টের মতো ইভেন্টগুলিতে ইভেন্ট প্রতিনিধি ব্যবহার করার সময় এটি দরকারী which


2

আইই 11 হিসাবে আপনার ব্যবহার করা দরকার addEventListenerattachEventঅবচয় করা হয় এবং একটি ত্রুটি নিক্ষেপ করা হয়।


0

পিপিকে যেমন এখানে উল্লেখ করেছে , আইই তে আপনি এটিও ব্যবহার করতে পারেন

e.cancelBubble = true;

0

<meta http-equiv="X-UA-Compatible" content="IE=9">আইই 9 + ব্যবহার addEventListenerকরে ইভেন্টের নামটিতে "চালু" সরিয়ে এইটিকে সমর্থন করে:

 var btn1 = document.getElementById('btn1');
 btn1.addEventListener('mousedown', function() {
   console.log('mousedown');
 });

0

সমস্যাটি হ'ল আইইয়ের স্ট্যান্ডার্ড addEventListenerপদ্ধতি নেই। আইই এর নিজস্ব ব্যবহার করে attachEventযা প্রায় একই কাজ করে।

পার্থক্যগুলির ভাল ব্যাখ্যা এবং তৃতীয় প্যারামিটার সম্পর্কেও কিরকস্মোডে পাওয়া যাবে

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