2013-06-14 2 views
3

je contrôle les boutons radio dans mon application avec Javascript. Le nombre de boutons radio n'est pas toujours le même. J'ai le problème quand le bouton radio est seulement un. La fonction est:difficile avec contrôle bouton radio en html avec javascript

function ChangeDiv() { 
    var i; 
    var j; 

    for (i=0; i<document.doc_copy.rad.length; i++) { 
     if (document.doc_copy.rad[i].checked) { 
      document.getElementById(document.doc_copy.rad[i].value).style.display='block'; 
     } else { 
      document.getElementById(document.doc_copy.rad[i].value).style.display='none'; 
     } 
    } 
} 

Si le bouton radio est coché, je montre un div HTML caché. Le problème est que lorsque je n'ai qu'un seul bouton radio, le nœud n'est pas exécuté et le div caché n'est pas affiché.

+0

montrent plus de code. – PiLHA

+3

Est-ce que vous incrémentez avant l'exécution de la fonction? Envisagez de ne pas utiliser un bouton radio s'il n'y en a qu'un. Ce scénario viole les normes d'utilisation attendues. – isherwood

+0

Pouvez-vous faire un violon démontrant le problème? – Barmar

Répondre

0

Après avoir lu une fois, je crois que je remarqué quelque chose dans le code. Vous vérifiez document.doc_copy.rad.length (boutons radio, je suppose), mais quand vous écrivez le code pour afficher la DIV, vous utilisez ce document.getElementById (document.doc_copy.rad [i] .value) .style.display. Je pense qu'au lieu de rad [i] vous devriez avoir quelque chose d'autre à propos de la div que vous voulez cacher/afficher.


Grâce à Barmar, j'ai réalisé que ma réponse était fausse.

Lorsque vous avez un seul bouton radio, l'index est 0. Cela signifie que l'instruction FOR ne sera pas exécutée du tout.

Vous devez utiliser une DO ... TOUT ce qui vous assure aurez une exécution peu importe quoi.

function ChangeDiv(){ var i; var j;  i = 0; do {  if(document.doc_copy.rad[i].checked){   document.getElementById(document.doc_copy.rad[i].value).style.display='block';  }else{   document.getElementById(document.doc_copy.rad[i].value).style.display='none';  } i++; } while(i<=document.doc_copy.rad.length); 
} 

+0

ou utiliser un .each de $ si vous utilisez jquery – ginman

+3

Pourquoi pas son 'déclaration for' être exécutée ? '.length' devrait être 1, et' 0 <1' est vrai. – Barmar

+0

Le même, le premier si n'est pas exécuté – Peiboludo

Questions connexes