2010-07-09 4 views
3

Ce qui suit ne fonctionne pas pour firefox. J'essaie de supprimer la ligne de la table sur le clic. Quelqu'un peut-il aider s'il vous plait. Merci beaucoup.window.event.srcElement ne fonctionne pas pour firefox?

<INPUT TYPE="Button" onClick="delRow()" VALUE="Remove"> 

function delRow(){ 
    if(window.event){ 
     var current = window.event.srcElement; 
    }else{ 
     var current = window.event.target; 
    } 
    //here we will delete the line 
    while ((current = current.parentElement) && current.tagName !="TR"); 
     current.parentElement.removeChild(current); 
} 
+0

Si vous devez faire cela sans un cadre pour une raison quelconque, cool, mais sinon, vous vous épargnerez un enfer de beaucoup de problèmes en raison de problèmes de compatibilité entre navigateurs en utilisant un framework comme jQuery ou Prototype –

+0

Pas tellement pour quelque chose d'aussi simple. –

Répondre

9
  1. window.événement est IE seulement. window.event n'existe pas dans la norme W3C.
  2. objet d'événement par défaut est passer en tant que premier argument à un gestionnaire d'événements avec la norme W3C.
  3. Un événement onlick en ligne dans le balisage appelant une fonction signifie que le gestionnaire d'événements appelle cette fonction. Avec votre balisage comme exemple. Cela signifie function() { delRow(); }. Comme vous pouvez le voir, vous ne pourrez pas voir l'objet event dans delRow() sauf lorsque vous êtes dans IE car l'événement se trouve dans l'objet window. ParentElement est également uniquement IE, dans la plupart des cas, le fait de le changer en parentNode fonctionnerait. En supposant que le nœud parent est également un élément.

Je vous suggère d'utiliser une bibliothèque javascript telle que jQuery ou de changer votre code si vous voulez garder les choses relativement les mêmes.

<INPUT TYPE="Button" onclick="delRow(event);" VALUE="Remove"> 

function delRow(e) { 
    var evt = e || window.event; // this assign evt with the event object 
    var current = evt.target || evt.srcElement; // this assign current with the event target 
    // do what you need to do here 
} 
+1

+1. En fait, comme vous l'avez fait là-bas, il n'y a pas besoin de 'var evt = e || window.event', puisque tous les navigateurs passeront l'objet événement à 'delRow()'. –

+0

@Tim, vous avez raison. C'est parce que je suis habitué à assigner le gestionnaire d'événements directement. par exemple. button.onclick = function (e) {// fait quelque chose}; – airmanx86

+1

"il n'y a pas besoin de var evt = e || window.event". Pas vrai, 'var evt = e || window.event' est une solution cross-browser appropriée. Il peut être encore simplifié à 'e = e || window.event', puis utilisez 'e' dans le reste de la fonction. –

1

Vous devez utiliser event.target au lieu de window.event.target travailler pour Firefox. Essayez d'utiliser ce qui suit.

<INPUT TYPE="Button" onclick="delRow()" VALUE="Remove"> 

function delRow(){ 
    if(window.event){ 
     var current = window.event.srcElement; 
    }else{ 
     current = event.target; 
    } 
    //here we will delete the line 
    while ((current = current.parentElement) && current.tagName !="TR"); 
     current.parentElement.removeChild(current); 
} 
+1

Je pense que vous devez également changer le gestionnaire de clic pour onclick = "delRow (événement)" – Annie

+0

@Annie: Lien dans votre profil ne fonctionne pas! – HashimR

1
var CurrentObject = 
    0 < window.navigator.appVersion.toString().indexOf("MSIE") 
    ? 
    window.event.srcElement 
    : 
    evt.target; 
0

NE JAMAIS utiliser des chèques individuels comme navigateur "vérifier MSIE". Savez-vous combien de navigateurs vous devez vérifier pour ... et les VERSIONS de navigateurs individuels ... pour les vérifier tous?

N'utilisez JAMAIS jQuery pour cela. Écrivez le code correct vous-même. N'incluez jamais des bibliothèques massives (inutiles) quand vous n'utilisez pas 99% de leurs fonctionnalités de toute façon.

0

vient d'être découvert, fonctionne sur ie & ff et chrome. d'autres ne le savent pas mais je m'attends à ce que cela fonctionne sur tous les autres. En tant que débutant en html, JS et PHP, c'est très énervant qu'il n'y ait pas de standard dans ces choses! même le style d'un simple élément div peut être un headage car le comportement n'est pas toujours le même sur les différents navigateurs!

function somefunc() 
{ 
    var callerelement = arguments.callee.caller.arguments[0].target; 
    alert(callerelement.id) 
} 
Questions connexes