web-dev-qa-db-fra.com

La valeur d'entrée ne s'affiche pas. Comment est-ce possible?

Ce doit être quelque chose de complètement stupide que j'ai fait ou que je fais, mais j'ai une entrée avec un attribut value qui n'est tout simplement pas affiché:

<div class="input text required">
  <label for="Product0Make">Make</label>
  <input name="data[Product][0][make]" type="text" maxlength="255" value="AC Make" id="Product0Make">
</div>

Quelqu'un a-t-il déjà vu cela auparavant? Ai-je une sorte de faute de frappe à laquelle je suis aveugle? Quoi qu'il en soit, voici le code CakePHP qui génère cette ligne:

<?php echo $this->Form->input( 'Product.' . $index . '.make', array( 'default' => $product['Product']['make'] ) ) ?>

J'ai un petit formulaire avec une poignée d'entrées de texte, 1 textarea et 2 selects. Aucune des valeurs de saisie de texte ne s'affiche, mais tout le reste est correct.

Toute réflexion sera apprécié. Je n'arrive même pas à croire que je dois poser cette question, mais c'est comme ça que je suis fou.

31
Rob Wilkerson

Argh. Je savais ça allait être quelque chose de plus stupide. Il y avait un peu de Javascript qui effaçait les données. La clairière était utile ailleurs, mais je ne savais pas qu'elle était en cours d'exécution, donc il était très pénible de la retrouver. Une fois que j'ai empêché la compensation dans ce scénario, mes valeurs sont réellement apparues. Comme je regardais le code dans Web Inspector, j'ai supposé qu'il s'agirait d'une vue "en direct", mais je suppose que ce n'est pas tout à fait vrai.

Merci pour votre aide tout le monde.

81
Rob Wilkerson

Le mien était lié à AngularJS

J'essayais de mettre les deux / une valeur HTML et un modèle ng, pensant que le modèle ng passerait par défaut à la valeur, car j'étais trop paresseux pour ajouter le modèle à la portée $ du contrôleur ...

La réponse a donc été d'assigner cette valeur par défaut à la variable $ scope.variable du contrôleur.

12
Suamere

Pour moi, c'était un navigateur dont on se souvenait. Changer la chaîne d'URL ou effacer l'historique peut aider.

4
Fanky

Confondez-vous les utilisations des paramètres 'default' et 'value' pour $ html-> input ()?

Si vous utilisez 'default' => $product['Product']['make'] et que $ this-> data est présent, le champ ne sera pas renseigné. Le paramètre 'default' a pour but d'afficher une valeur par défaut lorsqu'aucune donnée de formulaire ($ this-> data) n'est présente.

Si vous voulez forcer l'affichage d'une valeur, utilisez plutôt le paramètre 'value'. 'value' => $product['Product']['make']

1
Tyler

J'ai même réglé l'auto-complétion sur "off" sans résultat. J'ai fini par placer l'extrait suivant jQuery lors de l'événement document.ready.

myForm.find("input").each((i, el) => {
  $(el).val($(el).attr("value"));
});

Adittionally, ce serait l'équivalent en pur es2015:

document.querySelectorAll("myForm input").forEach(el => {
  el.value = el.getAttribute("value");
});

Si vous n'utilisez pas de précompileur comme Babel et que vous avez besoin de la compatibilité avec les anciennes versions du navigateur, modifiez le paramètre "(el) =>" pour "function (el)". J'ai essayé les deux codes dans mon scénario et a bien fonctionné.

0
Fabio Sungurlian

Avait un problème similaire avec la valeur d'entrée récupérée via ajax, correctement définie et vérifiable via la console du navigateur, mais pas visible. Le problème était un autre champ de saisie ayant le même identifiant et qui n'était pas évident en raison de la présence de plusieurs fichiers JSP, la plupart d'entre eux contenant des formulaires.

0
marco bonfigli

Pour moi, c'était parce que j'utilisais la balise <input> sans l'enfermer dans une balise <form>

0
Kewal Shah

Pour moi, le problème était que j'avais plusieurs entrées avec le même identifiant. Je pouvais voir la valeur dans le champ, mais le lire via javascript donnait une valeur vide car il lisait une entrée différente avec le même identifiant - j'ai été surpris qu'il n'y ait pas d'erreur javascript, je ne pouvais pas lire les valeurs que je pouvais voir dans la forme.

0
user6096790

Pour moi, c'était un problème uniquement pour Firefox. 

J'ai résolu en ajoutant l'attribut autocomplete="off" dans le champ de saisie.

<input type="text" value="value must appear" autocomplete="off"/>
0
J.BizMai

Pour les utilisateurs de Google ayant le même problème: Cela peut se produire si vous avez une valeur non numérique dans un champ de saisie de type number

Par exemple:

<input type="number" value="<? echo $myNumberValue; ?> "/>

Cela ne montrera rien même si les outils de développement indiquent que la valeur est présente, car l'espace supplémentaire après ?> la rend non numérique. Supprimez simplement l'espace supplémentaire. 

0
chakeda