0
votes

JQuery Trouver et la longueur

La longueur JS ne montre pas la longueur d'élément correcte et trouvez () ne peut pas obtenir la valeur d'un élément J'ai un code comme celui-ci: xxx

entrées avec ID mobiles1 et plus sont créées dynamiquement par des éléments ajoutés. Je veux obtenir nombre d'entrées que j'ai utilisées à 2 voies

  1. $ ('# mobiles'). Enfants («entrée»). Longueur; // Il ne renvoie rien
  2. document.getelementsByname ('mobiles []'). Longueur; // Il renvoie une valeur incorrecte de l'exemple 8 pour une entrée ou 16 pour 4 éléments d'entrée ou 32 pour 5 éléments d'entrée. Il semble que les pouvoirs de 2

    Deuxième problème est que je ne peux pas obtenir la valeur de la troisième entrée et après cela. Je viens d'obtenir une valeur de première et deuxième entrée avec le code ci-dessous. xxx

    ou en utilisant $ ('# mobiles' + i) .val (); Ne rien retourner.


5 commentaires

"sont créés de manière dynamique par des éléments ajoutés" Essayez-vous d'une manière ou d'une autre d'accéder aux éléments avant qu'ils ne soient créés?


non. Quand les éléments sont créés, je pousse un bouton pour obtenir des données


Donc, après avoir chargé comment lisez-vous les nouveaux champs? Je pense que votre problème est là.


Vous pouvez voir cet exemple que j'ai écrit. jsfiddle.net/hsoft/q4vufw0b/6


Et votre Jsfiddle fonctionne bien. Ln est la longueur et constatez en augmentation avec chaque clic.


3 Réponses :


1
votes

Il n'est généralement pas recommandé de combiner la vanille JS avec jQuery.

en boucle à travers les entrées Utilisez pure jQuery. xxx

modifié pour supprimer la recommandation de taille < / p>


2 commentaires

Vous ne devez pas utiliser taille () puisque la méthode est obsolète à partir de JQuery 1.8. Donc, l'OP devrait utiliser .length qui est la bonne voie.


C'est ce que j'allais poster. Si vous vous engagez à JQuery, vous pourriez aussi bien aller au total, au moins aussi loin que les interactions DOM.



1
votes

Obtenir la longueur:

$("#mobiles").find("input")[2].value


2 commentaires

$ ("# mobiles"). Trouver ("entrée"). La longueur ne fonctionne pas mais $ ("# mobiles"). Trouver ("entrée") [i] .value a fonctionné bien. Merci


Si la seconde a fonctionné, le premier aurait dû travailler aussi, sinon les $ ("# mobiles"). Trouver ("INPUT") [I] ne fonctionnerait pas, vérifiez si vous avez une faute de frappe où vous avez une faute de frappe où vous avez une faute de frappe ou de votre code exact



0
votes

en utilisant $ ("# entrée mobiles"). La longueur code> doit également fonctionner, vérifier l'exemple suivant:

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="mobiles">
  <input name="mobiles[]" id="mobiles0">
  <input name="mobiles[]" id="mobiles1">
  <input name="mobiles[]" id="mobiles2">
</div>

<button onclick="getValues()">Get Values</button>


6 commentaires

Thans. Il fonctionne pour l'élément statique mais la longueur ne fonctionne pas correctement pour un élément dynamique. Vérifiez cette jsfiddle jsfiddle.net/hsoft/q4vufw0b/6


Cela me confondre. Je ne réalisais pas pourquoi ça arrive


@hsoft Utilisez l'outil d'inspecteur dans ces cas: votre problème est à cette ligne: $ ('.'. '+ champ) (' '); . Fondamentalement, la première fois que vous créez une nouvelle entrée avec la classe (ou mobile dans ce cas particulier). Ensuite, le deuxième élément que vous créez sera ajouté à tous les éléments avec la classe mobile , la division principale plus le précédent créé et ainsi de suite ...


@hsoft Vous avez une solution possible: jsfiddle.net/pxt2wc7q . Fondamentalement, je change la classe de la principale DIV pour être unique.


Merci votre solution a fonctionné. Cela semble changer le nom de la classe de MAIN DIV résolvé le problème. Mais je ne comprends pas pourquoi il est en conflit avec ID Cause IM comptant la longueur d'ID spécifique childen. de toute façon merci encore


@hsoft aime a commenté ci-dessus, le Ajout ajoutait plusieurs entrées imbriquées chaque fois que vous l'exécutez. Parce que chaque nouvel élément que vous appendez a la classe .mobile et l'annexe ciblent tous les éléments avec la classe .mobile . En outre, si cette réponse a aidé à vous envisager de voter à nouveau.