2009-09-30 6 views
0

Le javascript ci-dessous fonctionne bien dans IE mais pas dans Mozilla. Nous avons une case à cocher d'en-tête, onClick dont toutes les autres cases de la page sont sélectionnées/désélectionnées. Quelqu'un peut-il aider?Javascript Incompatibilité avec Mozilla

<script language="javascript"> 
    function SelectAll() { 
     var frm = document.forms[0]; 
     var j = frm.elements.length; 
     var checkAll = document.getElementById("checkAll"); 
     var checkBoxCount = 0; 

     if(checkAll.checked == true) { 
      var i = 0; 
      while(i != j) { 
       if (frm.elements[i].type == "checkbox") { 
        frm.elements[i].checked = true; 
        checkBoxCount++; 
       } 
       i++; 
      } 

      var chkAll = document.getElementById("checkAll"); 
      chkAll.checked = true; 
     } else { 
      var i = 0; 
      while(i != j) { 
       if (frm.elements[i].type == "checkbox") { 
        frm.elements[i].checked = false; 
       } 
       i++; 
      } 
      var unchkAll = document.getElementById("checkAll"); 
      unchkAll.checked = false; 
     } 
    } 
+2

Installez firebug et déboguez-le sur mozilla ... –

+0

Y at-il une erreur? – rahul

+0

Cela fonctionne très bien pour moi en FF 3.5. – rahul

Répondre

0

Vous pouvez remplacer votre fonction par quelque chose de similaire. Voici un Working Demo qui fonctionne pour moi dans Firefox. ajouter /modifier à l'URL pour voir le code

function SelectAll() { 
     var frm = document.forms[0]; 
     var j = frm.getElementsByTagName('input'); 
     var checkAll = document.getElementById("checkAll"); 

     for (var i=0; i < j.length; i++) { 
     if (j[i].type == "checkbox") { 
      j[i].checked = checkAll.checked; 
     } 
     }    
    } 

EDIT:

Si vous devez éviter l'utilisation du symbole < dans le code, il pourrait être réécrite comme si (je J'ai rangé un peu de l'autre code aussi).

function SelectAll() { 
     var elements = document.forms[0].elements; 
     var i = elements.length; 
     var checkAll = document.getElementById("checkAll"); 

     while (i--) { 
     if (elements[i].type === "checkbox") 
      elements[i].checked = checkAll.checked; 
     } 

    } 
+1

la vérification de '.type ==" case à cocher "' devrait être dans la boucle: vous ne voulez pas terminer sur les éléments non-case à cocher! – Christoph

+0

Thanx Russ. Le code fonctionne correctement dans .net. Mais dans un fichier xslt, il est incapable de reconnaître le symbole '<'. Alors est-il possible d'utiliser le code ur mais sans le symbole '<'? –

+0

@Christoph - Merci, je ne pensais pas! –

-1

Si vous n'avez pas une bonne raison de ne pas, je suggère d'utiliser une bibliothèque JavaScript tels que jQuery, MooTools etc. Ils sont construits avec une compatibilité multi-navigateur à l'esprit et de faire faire des choses comme ce que vous êtes essayer de faire vraiment trivial.

3

Ok, voici une bien meilleure façon de le faire. Dans votre HTML, faites votre case à cocher comme ceci:

<input type="checkbox" onclick="selectAll(this)" /> 

Et puis votre Javascript:

function selectAll(checkbox) { 
    var form = checkbox.form; 
    for (var i = 0, l = form.elements.length; i < l; ++i) { 
     if (form.elements[i].type == 'checkbox') { 
      form.elements[i].checked = checkbox.checked; 
     } 
    } 
} 

Ici, il est pour vous de tester: http://jsbin.com/idadi

Si cela va dans un XSLT (pour une raison quelconque), alors le moyen le plus simple pour s'assurer que le < ne le bourre pas est de le rendre CDATA, comme ceci

<someElement><![CDATA[ 
    function selectAll() { 
     // as above 
    } 
]]></someElement> 
+0

Thanx Nickf. Cette solution fonctionne pour moi dans .net. Mais dans un fichier xslt, il est incapable de reconnaître le symbole '<'. Donc, ne peux pas le mettre en place là. Y at-il un moyen de remplacer votre code ur sans utiliser

+0

en utilisant une section CDATA fonctionnera en XSLT. – nickf

+0

Nick ... comment utilisons-nous ce CDATA en xslt? –

0

I simplifié votre code en ceci:

function SelectAll() { 
    var elements = document.forms[0].elements; 
    var check = document.getElementById("checkAll").checked; 
    for (var i = 0; i < elements.length; i++) { 
     if (elements[i].type == "checkbox") { 
     elements[i].checked = check; 
     } 
    } 
} 

Je l'ai essayé dans Firefox, et il fonctionne.

+0

Merci Guffa pour l'aide. –

Questions connexes