2011-01-10 3 views
5

J'ai fait ce quiz javascript: http://utbm.trunat.fr/CIP/quiz/Pourquoi mon JQuery ne charge pas sur IE?

Cela fonctionne sur un navigateur normal mais ne se charge même pas avec Internet Explorer.

Il semble qu'il ne reconnaît pas la fonction initQuiz().

Avez-vous une idée de comment je peux résoudre ce problème?

+0

Message: Appel inattendu à la méthode ou à l'accès aux propriétés. ligne: 113 Char: 460 code: 0 URI : http://utbm.trunat.fr/CIP/quiz/js/jquery-1.4.4.min.js Message: L'objet ne prend pas en charge cette propriété ou méthode Ligne: 110 Char: 6 Code: 0 URI: http://utbm.trunat.fr/CIP/quiz/js/start-quiz.js – simon

+1

J'aime comment il y a deux catégories de navigateurs : navigateurs normaux, et IE. –

Répondre

10
  • Internet Explorer n'accepte pas la virgule finale:

    question = {'texte': $(this).attr("texte"), 
        'sound': $(this).attr("sound"),} 
    
  • Apparemment, une autre erreur provient de cette ligne:

    $('title').html(QUIZ_TITLE[lang]); 
    

    Turns out you can't set the title like that in IE. Utilisez plutôt document.title = QUIZ_TITLE[lang].

  • Une troisième erreur est que vous introduisez une nouvelle variable, question sans le mot-clé var, ce qui est une erreur dans IE. Vous le faites à nouveau, plus tard, au response. Mettez à jour votre loadXML en tant que tel:

    function loadXML(xml) { 
        $(xml).find("question").each(function() { 
        var question = {'texte': $(this).attr("texte"), 'sound': $(this).attr("sound")}; 
    
         reponses = []; 
         $(this).find('carre').find('reponse').each(function() { 
         var reponse = {'texte': $(this).text(), 'sound': $(this).attr("sound"), 'bonne': false}; 
         if($(this).attr('bonne') == "vrai") reponse['bonne'] = true;    
         reponses.push(reponse); 
        }); 
    
        question['reponses'] = reponses; 
        questions.push(question); 
        }); 
        startGame(questions); 
    } 
    
  • Une quatrième erreur est la façon dont vous vérifiez qu'une réponse est correcte.

    if($(this).attr('data-type') == 'true') 
    

    Vous comparez la valeur de l'attribut data-type à la valeur de chaîne "true", mais quand vous attribuez la valeur, vous définissez à la valeur booléenne true:

    $('#r'+(i+1)+'input').attr('data-type', r.bonne); 
    

    Pour vous assurer que vous comparez toujours des valeurs de chaîne, par exemple, vous pouvez définir la valeur en tant que telle:

    $('#r'+(i+1)+'input').attr('data-type', r.bonne.toString()); 
    
+0

Ok merci pour cela, il y a une autre erreur je suppose? – Natim

+0

Est-ce que c'est probablement le '$ (this) .attr ('sound')' quand le son n'est pas défini qui génère une erreur? – Natim

+0

Cette erreur était dans 'loadXML (xml)'. Il a empêché l'exécution de 'loadXML', et éventuellement d'autres fonctions. Jusqu'à ce qu'il ait été corrigé, il est difficile de dire s'il y a d'autres erreurs ou non. –