Sie sollten nicht JavaScript mischen direkt in Ihr HTML mit JavaScript-Attributen wie onclick
. Stattdessen sollten Sie Ihre Handler programmgesteuert mit JavaScript verknüpfen. Am einfachsten:
function msg = function(evt){
// For old IE versions that don't pass in the event,
// get the global event object.
if (!evt) evt = window.event;
// Use currentTarget if available, target if not,
// and srcElement for old versions of IE
var receiver = evt.currentTarget || evt.target || evt.srcElement;
alert(receiver.id);
};
document.getElementById('b1').onclick = msg;
Eventhandler werden ein Ereignisobjekt als ersten Parameter (außer bei sehr alten IE-Versionen, die eine globale event
Eigenschaft) übergeben. Der Unterschied zwischen den currentTarget
und target
Eigenschaften hat mit Event Bubbling zu tun. Wenn ein Ereignis für ein untergeordnetes Element auftritt, aber dann zu einem Vorgänger mit einem Handler für dieses Ereignis übergeht, ist die Eigenschaft currentTarget
das untergeordnete Element und die target
-Eigenschaft der Vorgänger mit dem Ereignishandler.
Alte Versionen von IE haben keine currentTarget
oder target
Eigenschaften, sondern srcElement
verwenden das gleiche wie target
bedeuten.
Wenn Sie nun Ihre Event-Handler in Code direkt an Elemente anhängen (ohne Bubbling), haben Sie bereits (an einem Punkt) einen Verweis auf das Element. Also hier ist die Alternative, mehr fortgeschrittene-but-einfachere Methode:
var inputs = document.getElementsByTagName('input');
for (var i=0,len=inputs.length;i<len;++i){
if (inputs[i].type=='button'){
inputs[i].onclick = (function(i){
return function(){
alert(inputs[i].id);
}
})(i);
}
};
Ich kann das nicht passieren, verwende Dojoattachevent, um Ereignis mit einem Event-Handler zu verknüpfen – akshay
@akshay: Dann verwenden Sie das erste Beispiel, das 'this' nicht passiert. Sie sollten in der Lage sein, das 'Ereignis' durch' onclick = "msg.call (this, event)" 'zu übergeben. – user113716
@akshay - bestimmt Dojo entweder das Event oder das Element als Kontext? –