Pourquoi mon sélecteur JQuery retour a n.fn.init[0], et quel est-il?

J'ai un ensemble de généré dynamiquement, cases à cocher, où chacun d'eux a un data-id attribut correspondant à une base de données d'identification entier. Quand je remplir mon html-forme avec un objet pour le modifier, il ya une liste d'entiers représentant les cases à cocher qui doit être vérifié. Les cases sont enveloppés dans un div avec classe checkbox-wrapper.

Donc html ressemble à ceci:

<div class="checkbox-wrapper">
    <input type="checkbox" id="checkbox1" data-id="1">
    <label for="checkbox1">Checkbox 1</label>
</div>
<div class="checkbox-wrapper">
    <input type="checkbox" id="checkbox2" data-id="2">
    <label for="checkbox2">Checkbox 2</label>
</div>
<div class="checkbox-wrapper">
    <input type="checkbox" id="checkbox3" data-id="99">
    <label for="checkbox3">Checkbox 99</label>
</div>

Note que le code s'exécute sur l'auto incrémentation des numéros d'index, alors que les données-id peut avoir un id différent de la valeur. Je tiens à les sélectionner par data-id.

Maintenant, à l'aide de JQuery, je sais que je peux sélectionner les cases correspondantes comme ceci:

$(".checkbox-wrapper>input[data-id='99']");
$(".checkbox-wrapper>input[data-id='1']");

Cela fonctionne dans ma console, en chrome, et il retourne pertinentes DOM-élément. De même, ci-dessous, définit les cases à coché:

$(".checkbox-wrapper>input[data-id='99']").prop("checked", "checked");
$(".checkbox-wrapper>input[data-id='1']").prop("checked", "checked");

Cependant, si je itérer sur une liste d'entiers dans mon code javascript (pas directement dans la console), et de connecter les éléments retournés, basé sur les valeurs d'id, j'obtiens des résultats étranges:

var ids = [1,2]
$.each(ids, function(index, myID){
    console.log($(".checkbox-wrapper>input[data-id='"+myID+"']"));
    $(".checkbox-wrapper>input[data-id='"+myID+"']").prop("checked", "checked");    
}); 

Tout d'abord, aucune des cases sont cochées. Deuxièmement, ma console imprime des résultats étranges:

n.fn.init[0]
    context: document
    length: 0
    prevObject: n.fn.init[1]
    selector: ".checkbox-wrapper>input[data-id='1']"
    __proto__: n[0]

n.fn.init[0]
    context: document
    length: 0
    prevObject: n.fn.init[1]
    selector: ".checkbox-wrapper>input[data-id='2']"
    __proto__: n[0]

L'imprimé sélecteur de Cordes semble parfait. Exactement la même sélecteurs renvoie les DOM-éléments, de les écrire directement dans la console chromée. Puis ils retournent des objets comme ceci:

[<input type=​"checkbox" id=​"checkbox1" data-id=​"1">​]

Qu'est-ce que le n de.fn.init[0], et pourquoi il est revenu? Pourquoi mes deux apparemment identiques fonctions JQuery retour des choses différentes?

  • Le "étrange" résultat que vous voyez dans la console c'est l'objet jQuery lui-même. Vous pouvez aussi voir que le length propriété est 0, ce qui signifie que l'élément n'est pas trouvé dans le sélecteur vous avez fourni, d'où l'utilisation de prop() n'a aucun effet. Comme vous pouvez le voir dans cet exemple votre code comme vous l'avez décrit, il fonctionne. Cela signifie que vous avez besoin de vérifier la console d'erreurs, d'ailleurs dans votre code. Le problème pourrait être que vous n'avez pas compris la bibliothèque jQuery correctement, ou que vous êtes en cours d'exécution de votre code avant que le DOM est prêt.
  • Probablement le dernier. Mes cases sont créés à partir de données dynamiques. La case à cocher en-html est généré et ajouté au document par le biais d'une méthode, qui est appelée chaque fois qu'un datepicker est changé, c'est lors du chargement de l'objet pour remplir le formulaire. En d'autres termes, juste avant la vérification qui a des cases à cocher. Il est fait par le déclenchement d'une changeDate-événement, je ne pense pas que s'arrête l'exécution de ma population de la méthode, jusqu'à ce qu'il se fait de la création de la case DOM-éléments. @RoryMcCrossan, votre commentaire est en fait une réponse à ma question. Vous devriez écrire une réponse.
  • Donné, ça ne résout pas mon problème, mais il répond à la question parfaitement, et me donne une chance de passer, et enquêter sur la prochaine étape. D'autres questions que j'ai le plus approprié pour une nouvelle question.
  • .prop("checked", "checked") devrait être .prop("checked", true)
  • vous avez raison, mais il n'a pas vraiment d'importance à cette question, n'est ce pas? ref: stackoverflow.com/questions/10650233/...
  • (C'est pourquoi j'ai présenté comme un commentaire et non une réponse.) Vous exécutez votre code lorsque la page est complètement chargée? Si non, les DOM ne sera pas chargé et pas de sélecteurs va correspondre à quoi que ce soit.
  • Mon commentaire précédent sera répondre à votre question parfaitement

InformationsquelleAutor KjetilNordin | 2015-12-28