Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang contoh fungsi pendengaran mengikat JavaScript untuk kemahiran handles_javascript acara

Penjelasan terperinci tentang contoh fungsi pendengaran mengikat JavaScript untuk kemahiran handles_javascript acara

WBOY
Lepaskan: 2016-05-16 15:25:43
asal
1107 orang telah melayarinya

Contoh dalam artikel ini menerangkan cara JavaScript mengikat fungsi pendengaran kepada pengendali acara. Kongsikan dengan semua orang untuk rujukan anda, butirannya adalah seperti berikut:

Mengikat fungsi mendengar acara kepada elemen Dom dalam JavaScript adalah perkara yang sangat biasa, tetapi terdapat juga banyak pepijat di sini. Pelbagai pelayar menyediakan banyak kaedah untuk mengikat acara, tetapi hanya 3 yang boleh dipercayai:

1. Kaedah pengikatan tradisional:

elem.onclick = function( event ){
  alert(event.type + 'this.innerHTML');
};

Salin selepas log masuk

a. Kaedah pengikatan tradisional adalah sangat mudah dan stabil Ini dalam badan fungsi juga menunjuk ke nod yang sedang memproses acara (seperti nod yang sedang menjalankan pengendali acara).

b. Pengendali acara bagi sesuatu elemen hanya boleh mendaftarkan satu fungsi Jika didaftarkan berulang kali, penggantian akan berlaku lebih-lebih lagi, kaedah pengikatan tradisional hanya akan dijalankan dalam acara menggelegak.

2. Kaedah pengikatan standard W3C:

var elem = document.getElementById('ID');
elem.addEventListener('click' ,
  function( event ){ 
   alert(event.type + ' ' + this.innerHTML + 1); 
  } , 
  false //冒泡阶段执行
);
elem.addEventListener('click' ,
  function( event ){ 
   alert(event.type + ' ' + this.innerHTML + 2); 
  } ,
  false
);

Salin selepas log masuk

a. Kaedah pengikatan ini menyokong kedua-dua peringkat tangkapan dan pemproses masa berbilang fungsi pendengaran boleh didaftarkan untuk pengendali acara yang sama bagi elemen yang sama dan, di dalam fungsi mendengar, ini menunjuk kepada elemen semasa.

b. Walau bagaimanapun, pelayar IE yang popular tidak menyokong kaedah pendaftaran ini.

3. Kaedah pendaftaran pengendali acara IE:

var elem = document.getElementById('a');
elem.attachEvent('onclick' ,
  function(){ 
   alert(window.event.srcElement.innerHTML + ' ' + this.innerHTML + 1); 
  } 
);
elem.attachEvent('onclick' ,
  function(){ 
   alert(window.event.srcElement.innerHTML + ' ' + this.innerHTML + 2); 
  }
);

Salin selepas log masuk

a. Kaedah mengikat ini boleh mendaftarkan pemegang acara yang sama beberapa kali.

b. Model acara IE tidak menyokong penangkapan peristiwa; ini dalam badan fungsi mendengar tidak menghala ke elemen semasa, dan window.event.srcElement menghala ke nod tempat peristiwa berlaku, bukan nod semasa dan dalam Peristiwa IE Tiada sifat DOM currentTarget yang setara dalam objek.

4. Kaedah silang pelayar satu:

function addEvent(element, type, handler) {
  if (!handler.$$guid) handler.$$guid = addEvent.guid++;
  if (!element.events) element.events = {};
  var handlers = element.events[type];
  if (!handlers) {
  handlers = element.events[type] = {};
  if (element["on" + type]) {
   handlers[0] = element["on" + type];
  }
  }
  handlers[handler.$$guid] = handler;
  element["on" + type] = handleEvent;
};
addEvent.guid = 1;
function removeEvent(element, type, handler) {
  if (element.events && element.events[type]) {
  delete element.events[type][handler.$$guid];
  }
};
function handleEvent(event) {
  var returnValue = true;
  event = event || fixEvent(window.event);
  var handlers = this.events[event.type];
  for (var i in handlers) {
  this.$$handleEvent = handlers[i];
  if (this.$$handleEvent(event) === false) {
   returnValue = false;
  }
  }
  return returnValue;
};
function fixEvent(event) {
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
};
fixEvent.preventDefault = function() {
  this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
};

Salin selepas log masuk

5. Kaedah silang pelayar dua:

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 );
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
  obj.detachEvent( 'on'+type, obj[type+fn] );
  obj[type+fn] = null;
  } else
  obj.removeEventListener( type, fn, false );
}

Salin selepas log masuk

Saya harap artikel ini akan membantu semua orang dalam pengaturcaraan JavaScript.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan