Partage
  • Partager sur Facebook
  • Partager sur Twitter

onclick sur chekbox / navigateurs

Sujet résolu
    11 janvier 2011 à 15:37:19

    Bonjour,

    Je suis un jeune Zérodidacte, mais, ambitieux, je me lance dans une appli-web un peu costaud.
    Il est probable sur je revienne plusieurs fois vers vous, parce que je sens que je vais galérer !!


    Voilà, j'ai un soucis de compatibilité entre navigateur que je n'arrive pas a résoudre, malgré plusieurs recherches sur sites et forums.

    Je dois calculer des montants en fonction des champs d'un formulaire, et pouvant évoluer avant le submit.
    Comme il y aura des changement de prix dans le futur, il est important que ce soit mis en base de donnée calculé, et non récupéré dans la bdd pour calculer après coup.

    Bref, mon code fonctionne pas trop mal, sauf les 3 checkbox qui évoluent bien sur safari et chrome, mais pas sur firefox et IE...

    <label for="video">VID</label><input type="checkbox" name="video" id="video" onclick="Video(this.value)"/> 
    <label for="photo">PHO</label><input type="checkbox" name="photo" id="photo" onclick="Photo(this.value)"/> 
    <label for="usb">USB</label><input type="checkbox" name="usb" id="usb" onclick="USBKey(this.value)"/>
    


    var VID = 0;
    var PHO = 0;
    var USB = 0;
    
    function Video(video){
    alert(video);
    VID = video;
    calculate();
    }
    function Photo(photo){
    PHO = photo;
    calculate();
    }
    function USBKey(usbkey){
    USB = usbkey;
    calculate();
    }
    


    Comme vous le voyez, ma fonction calculate() se sert de variable globales (bouh ! c'est pas beau! .. ben oui mais bon :-° ....) qu'elle met a jour avec toute une série de conditions correspondantes aux différents champs du formulaire. Ensuite elle appelle une autre fonction qui remplace des input hidden pour envoyer a la bdd.

    J'ai placé un alert() pour voir ce que récupère ma fonction Video() appellée sur le onclick.
    Il me semble qu'une checkbox revoi "on" si elle est coché et rien si elle est décochée.

    C'est ce que me dis mon alert sous safari et chrome, mais j'ai l'impression que IE et Firefox n'aime pas le (this.value) quand il n'y a pas de valeur. Ils me gardent l'ancienne valeur, et c'est embêtant pour mes calculs derrière.

    Comment puis-je faire s'il vous plait ?? :(
    • Partager sur Facebook
    • Partager sur Twitter
      11 janvier 2011 à 15:48:58

      Salut,

      C'est à vérifier, mais il me semble qu'on peux régler ce problème de la sorte :

      var valeur = moninput.checked || moninput.value;
      


      En fait, "checked" et "value" sont renseignés différemment par les navigateurs. Si checked n'existe pas, il se retourne vers value.
      Mais bon, c'est de la théorie. Je n'ai pas vraiment le temps de tester là tout de suite ^^
      • Partager sur Facebook
      • Partager sur Twitter
      Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
        11 janvier 2011 à 16:09:04

        Je suis pas sur d'avoir bien employé ta proposition.
        J'ai testé comme ceci :

        <label for="video">VID</label><input type="checkbox" name="video" id="video" onclick="Video()"/>
        


        var VID = 0;
        
        function Video(){
        var checkVid = document.getElementById("video");
        VID = checkVid.checked || checkVid.value;
        calculate();
        }
        


        Résultat, sur IE et FF, ça évolue a contre pied, coché j'ai 0 et décoché, j'ai la valeur ! :o
        Et sur Safari et Chrome, ça ne fonctionne plus du tout, 0 tout le temps...

        EDIT :

        Bon, après plusieurs manip' a partir de ça, ça à l'air de fonctionner.
        Merci Shivvan pour ton coup de main ! :)
        • Partager sur Facebook
        • Partager sur Twitter

        onclick sur chekbox / navigateurs

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown