11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai un soucis avec le javascript qui suit.
Il doit résoudre un certain nombre de fois une expression qui suppose le tirage de dés au nombres de faces "exotiques" et afficher le résultat dans un tableau.
Tout se passe très bien sauf que le tableau disparait au bout d'une fraction de seconde avec Firefox. Avec Opera, la page devient blanche puis revient à sont état d'origine (pas de tableau bien sur). Konqueror prétend trouver une erreur de syntaxe à la ligne 3.

Il doit y avoir quelque chose qui cloche mais je ne parvient pas à comprendre quoi.

Merci de votre aide.

ecm.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="fr">

<head>
<title>Webdé</title>

<meta name="author" content="Pititjo"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>

<link rel="stylesheet" type="text/css" href="webde.css" />

<script type="text/javascript">
<![CDATA[
var expression = "";
var ans = new Array(0);

function tirage(nb, faces) {
    var somme = 0;
    for (lancer=0 ; lancer < nb ; lancer++) {
        somme += Math.ceil(Math.random()*faces);
    }
    return somme;
}

function tirage_interface(expr, nb, faces) {
    return tirage(nb, faces);
}

function resolution(expr) {
    var re = /(\d+)[d|D](\d+)/g;
    expression = expr.toUpperCase();
    expression = expression.replace(re, tirage_interface);
    expression = expression.replace("ANS", ans[ans.length]);
    expression = expression.replace("×", "*");
    expression = expression.replace("÷", "/");
    var result = eval(expression);
    return [expression, result];
}

function egal() {
    var expression = document.forms["calcul_form"].expression.value;
    var iterations = document.forms["calcul_form"].nblancers.value;
    for (it=0 ; it<parseInt(iterations) ; it++) {
        var resultat = resolution(expression);
        line = document.createElement("tr");
        cell1 = document.createElement("td");
        cell1.appendChild(document.createTextNode(expression));
        cell2 = document.createElement("td");
        cell2.appendChild(document.createTextNode(resultat[0]));
        cell3 = document.createElement("td");
        cell3.appendChild(document.createTextNode(resultat[1]));
        line.appendChild(cell1);
        line.appendChild(cell2);
        line.appendChild(cell3);
        document.getElementById("resultat_table").appendChild(line);
    }
}
]]>
</script>
</head>

<body>
    <form name="calcul_form" method="post">
        <label for="expression">Expression</label>
        <input type="text" name="expression" value="1d6+1d4"/>
        <label for="nblancers">Nombre de lancers</label>
        <input type="text" name="nblancers" value="10"/>
        <button onclick="egal()" name="=">=</button>
    </form>
    <div id="resultat">
        <table id="resultat_table">
        </table>
    </div>
</body>
</html>

Modifié par Pititjo (10 Jul 2007 - 02:03)