Je convertis dynamiquement une liste d'options en une série de boutons radio. L'une des valeurs de l'option a un guillemet littéral.

<option value="6\" tall">

Lorsque je passe en revue chaque option, tirez la valeur a $(this).val(); puis je crée une chaîne pour le bouton radio:

rb="input id=\"CTRL"+fld+"_"+cnt+"\" name=\""+fld+"\" type=\"radio\" "+ sel+" value=\"" +val+ "\"" +valCaption";

Si je débogue et que je m'arrête dessus, la chaîne est créée correctement, mais lorsque j'insère l'élément, le littéral dans la valeur est perdu et le résultat est:

<input id="CTRLText1_3" name="Text1" type="radio" value="Rev 6" tall"="">

Je ne peux pas échapper à la valeur car la valeur ne correspond pas réellement à ce qui est retourné par la liste de sélection d'origine.

Des idées sur la façon de créer ce bouton radio?

0
Eric Cooper 8 avril 2020 à 00:18

3 réponses

Meilleure réponse

Merci pour les suggestions de tout le monde. J'ai trouvé le problème. En fait, je devais d'abord collecter les valeurs des options, puis créer les boutons radio avec un attribut de valeur vide et l'ajouter à la page. Ensuite, faites une boucle et juste $ (fieldid) .val (value) pour définir les valeurs.

L'autre problème avec l'enregistrement de la valeur, puis la remise de notre page en mode édition et la valeur n'étant pas re-sélectionnée. Le problème ultime est un bogue dans le cœur du logiciel où il ne compare pas correctement la valeur stockée à la valeur dans la liste.

0
Eric Cooper 10 avril 2020 à 12:18

En HTML \" ne signifie pas une citation littérale, cela signifie simplement une barre oblique inverse suivie d'une citation double. En HTML pour produire un caractère de citation lorsque vous en avez besoin, vous utilisez Entités HTML et l'entité spécifique pour un guillemet double est: &quot;.

<input value="&quot;To be or not to be&quot;">

\" est le code d'échappement pour un guillemet double lorsque cette chaîne est analysée par le moteur d'exécution JavaScript, pas par l'analyseur HTML.

Donc, value="6\" ne contient pas de citation littérale. Il contient 6\. La citation après le \ est la citation de fermeture pour l'attribut value qui fait que tall" reste en HTML non valide que l'analyseur HTML ignore simplement. Lorsque vous tirez la valeur de l'entrée, vous n'obtiendrez que 6\.

Vous avez déclaré que la chaîne était créée correctement, mais ce n'est pas le cas. Regardez attentivement la fin de ce que vous dites obtenir;

<input id="CTRLText1_3" name="Text1" type="radio" value="Rev 6" tall"="">

tall"="" n'est pas du code HTML valide.

Pour faire ce que je pense que vous recherchez, vous devez utiliser des guillemets simples pour l'attribut HTML, puis les guillemets doubles peuvent être correctement stockés pour que JavaScript puisse les extraire plus tard. Vous n'aurez pas besoin de vous échapper:

console.log(document.querySelector("option").value);
<option value='6" tall'>
1
Scott Marcus 7 avril 2020 à 21:51

Plus d'informations: J'ai essayé de créer les boutons radio avec un attribut "value" vide:

<input type="radio" value="">

La balise d'option ressemble en fait à ceci:

<option value="6\" tall">

En parcourant mes options, je mets les valeurs dans un tableau. Ensuite, après avoir ajouté le code HTML des boutons radio à la page, je fais une boucle dans le tableau et ajoute la valeur à l'attribut du bouton radio.

for(x=0;x<arrVals.length; x++){
    $("#CTRL"+fld+"_"+x).attr("value",arrVals[x]);
}

Le résultat final, cependant, est le suivant:

<input id="CTRLText1_1" name="Text1" type="radio" value="Rev 6&quot; tall">

Le signe = a été échappé avec "& quot" Bien que ce soit plus proche, ce n'est malheureusement pas la même chose. La valeur d'origine dans la balise d'option ne correspond pas à la valeur de résultat final du bouton radio.

0
Scott Marcus 8 avril 2020 à 21:20