2010-10-22 9 views
0

Dans mon programme JavaScript, j'obtiens des valeurs d'un formulaire à travers ses éléments, puis je les imprime dans l'ordre, dans une alerte. Cela fonctionne très bien dans Firefox, mais dans Chrome la commande est farfelue et elle se termine par le bouton "Soumettre".Firefox pense que <fieldset> est un élément de formulaire; Chrome ne fonctionne pas

J'ai essayé de me débarrasser du fieldset et d'ajuster les nombres, et cela a fonctionné, mais j'ai aimé le fieldset! De plus, je ne peux pas simplement créer un tableau et le parcourir, car les champs sont ajustés par ordre de tabulation et je veux les imprimer en conséquence. Aucune suggestion?

En essayant de valider j'ai trouvé que j'avais besoin du fieldset pour XHTML Strict. J'ai stocker les éléments d'un tableau, comme suit:

var $ = function (id) { return document.getElementById(id); } 

function check() { 
var x = $("myForm"); 

var user = new Array(); 
user[0] = x.elements[0].value; 
user[1] = x.elements[2].value; 
user[2] = x.elements[4].value; 
user[3] = x.elements[1].value; 
user[4] = x.elements[3].value; 
user[5] = x.elements[5].value; 

Et puis les vérifier en utilisant un autre couple de tableaux et d'afficher les résultats dans une fenêtre pop-up:

var answers = new Array(); 
answers[0] = "sample1"; 
answers[1] = "sample2"; 
answers[2] = "sample3"; 
answers[3] = "sample4"; 
answers[4] = "sample5"; 
answers[5] = "sample6"; 

var display = new Array(); 
for (var i=0;i<6;i++) { 
    if (user[i] == "") { 
     display[i] = "You entered nothing."; 
     } 
    else if (user[i] == answers[i]) { 
     display[i] = "Correct!"; 
     } 
    else { 
     display[i] = "Wrong. The correct answer is \"" + answers[i] + "\"."; 
     } 
    } 
alert(display[0] + "\n" + display[1] + "\n" + display[2] + "\n" + display[3] + "\n" + display[4] + "\n" + display[5]); 
} 
+0

Ajoutez le HTML de votre formulaire et votre JavaScript à la question. –

+0

Ajustement des * quels * nombres? Je suppose que le problème est que Chrome vous donne les champs dans un ordre de hashtable interne (ce qui est un peu bizarre, car il est obligé de les livrer dans l'ordre quand il publie le formulaire). – Pointy

+0

Si vous ne pouvez pas faire un tableau (nodelist), comment accéder aux éléments? –

Répondre

0

Je pense que vous « ll être mieux en utilisant ID:

<form ...> 
    <input ... id="q0" /> 
    <input ... id="q1" /> 
    <input ... id="q2" /> 
</form> 

vous pouvez donc écrire ce code JavaScript:

var answers = new Array(); 
answers[0] = "sample1"; 
answers[1] = "sample2"; 
answers[2] = "sample3"; 
answers[3] = "sample4"; 
answers[4] = "sample5"; 
answers[5] = "sample6"; 

var display = new Array(); 
for (var i=0;i<6;i++) { 
    var user = $('q' + i).value; 
    if (user == "") 
    display[i] = "You entered nothing."; 
    else if (user == answers[i]) 
    display[i] = "Correct!"; 
    else 
    display[i] = "Wrong. The correct answer is \"" + answers[i] + "\"."; 
} 
alert(display[0] + "\n" + display[1] + "\n" + display[2] + "\n" + display[3] + "\n" + display[4] + "\n" + display[5]); 

Votre code peut recevoir beaucoup d'amélioration aussi:

var answers = [ "sample1", "sample2", "sample3", "sample4", "sample5", "sample6" ]; 

var display = new Array(); 
for (var i=0;i<6;i++) { 
    var user = $('q' + i).value; 
    if (user == "") 
    display.push("You entered nothing."); 
    else if (user == answers[i]) 
    display.push("Correct!"); 
    else 
    display.push ("Wrong. The correct answer is \"" + answers[i] + "\"."); 
} 
alert(display.join('\n')); 
+0

Merci beaucoup, c'est parfait! – user460847