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: 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 p> 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. p> ou en utilisant
$ ('# mobiles'). Enfants («entrée»). Longueur; Code> // Il ne renvoie rien Li>
document.getelementsByname ('mobiles []'). Longueur; Code> // 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 li>
ol> $ ('# mobiles' + i) .val (); code > Ne rien retourner. P> p>
3 Réponses :
Il n'est généralement pas recommandé de combiner la vanille JS avec jQuery.
en boucle à travers les entrées Utilisez pure jQuery. p> modifié pour supprimer la recommandation de taille p> < / p>
Vous ne devez pas utiliser taille () code> puisque la méthode est obsolète à partir de JQuery 1.8. Donc, l'OP devrait utiliser .length code> 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.
Obtenir la longueur:
$("#mobiles").find("input")[2].value
$ ("# 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
en utilisant p> $ ("# entrée mobiles"). La longueur code> doit également fonctionner, vérifier l'exemple suivant: <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>
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) (' mobile code> dans ce cas particulier). Ensuite, le deuxième élément que vous créez sera ajouté à tous les éléments avec la classe mobile code>, 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 code> 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 code> et l'annexe ciblent tous les éléments avec la classe .mobile code>. En outre, si cette réponse a aidé à vous envisager de voter à nouveau.
"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.