2010-11-01 9 views
2

L'exemple de code suivant fonctionne dans FireFox mais IE cause des problèmes.La valeur de la case à cocher jQuery générée dans IE8 est-elle stockée sur "on" plutôt que sur la valeur réelle?

Ce code rend essentiellement une liste de cases à cocher dynamiques en fonction d'un tableau JSON.

Lorsque j'essaie de soumettre le variblse, la valeur des cases à cocher est enregistrée comme "on". J'ai remarqué qu'il y a un attribut supplémentaire qui est rendu (IE seulement) appelé jQuery1288631121994 qui stocke la valeur réelle. Il semble que jquery essaie de gérer l'état des cases à cocher mais je n'arrive pas à accéder aux valeurs stockées?

Voici mon exemple de test:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script src="js/jquery-1.4.3.min.js" type="text/javascript"></script> 
    <script language="javascript" type="text/javascript"> 


     var state = { 
      Professions: [1] 
     }; 

     $(document).ready(function() { 



      var data = [{ "ID": 1, "Name": "Football" }, { "ID": 2, "Name": "Cricket" }, { "ID": 3, "Name": "Hockey"}]; 

      $.each(data, function() { 

       var catid = this['ID']; 
       var catname = this['Name']; 

       var selected = $.inArray(catid, state.Professions) != -1 ? true : false; 

       $("<li></li>") 
        .append(
         $("<input></input>").attr({ 
          id: 'category' + catid 
          , name: 'categories' 
          , value: catid 
          , type: 'checkbox' 
          , checked: selected 
         }) 
         .click(function (event) { 
          //alert($(this)[0].value); 

         }) 
        ) 
        .append(
          $(document.createElement('label')).attr({ 
           'for': 'category-' + catid 
          }) 
          .text(catname) 
        ) 
        .append(
         $("<div></div>").addClass("clear") 
        ) 
        .appendTo("#ProfSelector ul"); 

      }); 

         $("#btnTest").click(function() { 
       alert($("#ProfSelector input:checkbox:checked").val()); 
      }); 

     }); 
    </script> 
</head> 
<body> 
    <div id="ProfSelector"> 
     <ul> 
     </ul> 
    </div> 
    <a href="#" id="btnTest">Test</a> 
</body> 
</html> 
+0

duplication possible de [JQuery Checkbox liste problème dans IE? Les valeurs enregistrées comme on, on, on devraient être 10,12,13 etc ...] (http://stackoverflow.com/questions/4069598/jquery-checkbox-list-problem-in-ie-values-saved-as -on-on-devrait-être-10-12-13-e) –

+0

Salut, c'est le même problème. J'ai senti que cela rendait le problème plus clair en donnant un exemple complet et en ne poluant pas la question initiale avec mon erreur initiale, c'est le diagnostic du problème. – Mantisimo

+0

[Ceci] (http://jsfiddle.net/RFneh/) est le code que j'utilise pour générer des checkboxes _my_. Produit toujours les mêmes erreurs. Une solution serait appréciée. – jurgemaister

Répondre

0

J'ai trouvé une solution pour tous ceux qui se intéresse. C'est plus un travail autour car je ne pouvais pas comprendre pourquoi cela se passait.

Lors de la création de chaque élément d'entrée au lieu de sélectionner le champ de valeur qui est défini sur 'activé' dans IE lors de l'utilisation de jquery 1.4. J'ai créé un attr Val pour chaque élément et stocke l'identifiant de la catégorie. Ensuite, j'appelle simplement ce code sur submit pour récolter les résultats.

$(document).ready(function() { 
     $("form").submit(function(){ 

      var str = ""; 
       $("#ProfSelector input:checkbox:checked").each(function() { 
        str += $(this).attr("val") + ","; 
       }); 

      $("form").append($("<input></input>").attr({ "type":"text", "name":"selectedCategories", "value":str })); 
     }); 
    }); 
0

Je trouve la fonction .map utile pour ce scénario. Pas besoin de supprimer un «,» avec cet usage.

$('#ProfSelector input:checkbox:checked').map(function() { 
    return this.id; 
    // or jquery object 
    // return $(this).val(); 
}).get().join(','); 
+0

Cool, je n'ai jamais vu ça! Merci – Mantisimo

3

Il semblerait que IE n'aime pas la façon dont les attributs checkbox sont définis; si cela est changé à l'IE suivant est heureux: http://jsfiddle.net/tS3cs/

$("<li></li>") 
.append(
    '<input id="category'+catid+'" value="'+catid+'" type="checkbox"></input>' 
) 
.append(
    $(document.createElement('label')).attr({ 
     'for': 'category-' + catid 
    }) 
    .text(catname) 
) 
.append(
    $("<div></div>").addClass("clear") 
) 
.appendTo("#ProfSelector ul"); 

$('#category'+catid).attr('checked',selected); 
+1

En effet, la solution semble être d'éviter d'utiliser jQuery tout à fait avec ce problème. Notre solution consistait à utiliser javascript standard 'createElement'. – jurgemaister