2010-08-06 9 views
0

J'ai ce HTML:onBlur événement dans IE

<textarea class="question" onBlur="onBlurFun(event); return true;" 
name="aaa" id="bbb"></textarea> 

Et cette fonction en JavaScript

onBlurFun = function(event) { 
var tgt = $(event.target); 
alert(tgt.attr('id')); 
    } 

Dans IE, tgt est pas correctement réglée. Que dois-je faire pour avoir accès au nœud appelant?

Répondre

2

event.srcElement est l'équivalent d'Internet Explorer de event.target. jQuery normalise cela pour vous dans les gestionnaires d'événements appliqués en utilisant .bind(), donc vous pouvez utiliser event.target dans Internet Explorer, mais les gestionnaires d'événements appliqués via des attributs HTML ou les propriétés DOM n'auront pas la propriété. Dans votre cas, vous pouvez modifier le code pour

// event.target or event.srcElement 
var tgt = $(event.target || event.srcElement); 

ou suivre June R's advice et transmettre une référence à l'élément à la place.

Comme une note de côté, il n'y a pas besoin de return true; pour la plupart des événements, mais surtout pour onblur et onfocus puisque vous ne pouvez pas annuler l'action par défaut d'entre eux de toute façon.

1

Pour vérifier la cible ne passent pas l'événement intead de cet objet passe elle-même comme

regard ce code

<textarea class="question" onBlur="onBlurFun(this); return true;" 
name="aaa" id="bbb"></textarea> 

function onBlurFun(obj) 
{ 
    alert(obj.id); 
} 
0

IE possède son propre objet d'événement global.

Cela devrait fonctionner

onBlurFun = function(event) { 

    if (!event) 
    { 
    event = window.event; 
    event.target = event.srcElement; 
    } 

    var tgt = $(event.target); 
    alert(tgt.attr('id')); 

} 
Questions connexes