web-dev-qa-db-fra.com

JavaScript: déclaration de type IIF

Venant de VB, JavaScript n'est pas très facile à comprendre. S'il vous plaît ne soyez pas négatif, j'ai essayé et cherché des charges mais sans chance. BTW, je crée un contrôle déroulant initialisé à partir d'une liste d'options Select dans JS.

Code factice:

var col = 'tardis'; 
var x = '<option value="' + col + '">Very roomy</option>');

Je voudrais ajouter selected après la valeur de col UNIQUEMENT si col est égal à "tournevis".

J'ai essayé d'utiliser l'instruction IF avec le? et le: mais je n'arrive pas à comprendre. Avoir '' comme fausse valeur ne fonctionne pas. Aucun élément n'est sélectionné et la liste est vide. Supprimez l'instruction IF et tous les travaux.

Toutes les idées et encore une fois, désolé pour la nouveauté.

33
Alex Guerin
'<option value="' + col + '"'+ (col === "screwdriver" ? " selected " : "") +'>Very roomy</option>';
59
George Mauer
var x = '<option value="' + col + '"'
if (col == 'screwdriver') x += ' selected';
x += '>Very roomy</option>';
3
jspcal

Quelque chose comme ça:

for (/* stuff */)
{
    var x = '<option value="' + col + '" '
        + (col === 'screwdriver' ? 'selected' : '')
        + '>Very roomy</option>';
    // snip...
}
3
Matt Ball

Si votre objectif final est d'ajouter des éléments à votre page, manipulez simplement le DOM directement. N'utilisez pas la concaténation de chaînes pour essayer de créer du HTML - quelle douleur! Voyez combien il est plus simple de simplement créer votre élément, au lieu du HTML qui représente votre élément:

var x = document.createElement("option");
x.value = col;
x.text = "Very roomy";
x.selected = col == "screwdriver";

Ensuite, plus tard, lorsque vous placez l'élément dans votre page, au lieu de définir le innerHTML de l'élément parent, appelez appendChild():

mySelectElement.appendChild(x);
2
gilly3

J'ai tapé ceci dans ma barre d'URL:

javascript:{ var col = 'screwdriver'; var x = '<option value="' + col + '"' + ((col == 'screwdriver') ? ' selected' : '') + '>Very roomy</option>'; alert(x); }
0
Joe Phillips