2010-05-17 2 views
4
function addOption(selectbox, val, txt){ 
    ...... 
    } 

    addOption(list, "Cars", "Cars"); 

Je dois ajouter ceci devant le texte de la fonction:Un peu d'aide javascript nécessaire ici (facile)

    

Pour qu'il y ait un espace à venir avant le texte de l'option ... Peu importe à quoi ça sert, c'est juste déroutant ... Je ne sais pas comment l'insérer dans le code js.

Si je le fais comme ceci:

addOption(list, "Cars", "   Cars"); 

Alors le     vient dans le texte, de sorte qu'il devient affiché pour les utilisateurs. Cependant, je besoin d'être interprété comme « l'espace » ...

Si vous ne comprenez pas le moi savoir ...

Comment puis-je faire cela? Citations, doubles guillemets, etc?

Merci

MISE À JOUR:

function addOption(selectbox, value, text, cl) 
{ 
    var optn = document.createElement("OPTION"); 
    optn.text = text; 
    optn.value = value; 
    if (cl==1){ optn.className = "nav_option_main"; } 
    selectbox.options.add(optn); 
} 
+0

Votre problème de base est que vous attribuez à '' innerText' dans addOption() ', au lieu de' innerHTML'. Cependant, assigner 'innerHTML' n'est pas recommandé puisque le texte de l'option pourrait contenir n'importe quel genre de choses maléfiques (pensez XSS), donc' coller avec 'innerText' /' textContent' est certainement la bonne chose à faire. – Tomalak

Répondre

2

Afficher le code de la fonction addOption. Quelque chose doit aller mal là-bas, puisque le code HTML suivant fait ce que vous voulez:

<select> 
<option>foo</option> 
<option>&nbsp;bar</option> 
</select> 

Mise à jour: vous configurez la .text au lieu de son innerHTML de option - c'est pourquoi les espaces se sont échappés. Essayez ceci:

function addOption(selectbox, value, html, cl) { 
var optn = document.createElement('option'); 
optn.innerHTML = html; 
optn.value = value; 
if (cl) { 
    optn.className = 'nav_option_main'; 
}; 
selectbox.options.add(optn); 
}; 

En JavaScript, vous pouvez utiliser pour forcer le caractère de chaîne échappe chaîne littérale ( \xNN): \x20. Cela n'aidera pas dans votre cas cependant.

+0

vérifier ma modification pour la fonction –

+0

@Camran: J'ai mis à jour ma réponse. –

+0

@Camran: Voir mon avertissement concernant l'affectation à 'innerHTML'.Ce n'est * vraiment * pas ce que vous devriez faire. – Tomalak

2

Solution simple? Utiliser

String.fromCharCode(160) // char code 160 is nbsp 

à la place de &nbsp;. Répéter n fois via:

// n = 3 in this case 
Array(3).join(String.fromCharCode(160)); 

Alors ...

function addOption(selectbox, val, text, indent){ 
    if (typeof indent == "number" && indent > 0) 
    var indentStr = Array(indent).join(String.fromCharCode(160)); 
    else 
    var indentStr = ""; 

    var optn = document.createElement("OPTION"); 
    optn.text = indentStr + txt; 
    optn.value = value; 
    selectbox.options.add(optn);  
} 

addOption(list, "Cars", "Cars", 3); 
1

Êtes-vous à la liste référenceurs case (select/option)? Vous n'avez pas besoin &nbsp;, les espaces blancs simples ' ' feront l'affaire.

0

Utilisation innerHTML au lieu de text pour empêcher l'encodage ...

optn.innerHTML = '&nbsp;&nbsp;&nbsp;Test'; 
+0

Est-ce que ce n'est pas "dangereux" comme dans mon commentaire de Tomalek? –

+0

@Camran Non, je ne pense pas que vous ayez quelque chose à craindre là-bas. Je ne sais pas de quel "danger" il parle –

Questions connexes