2010-11-20 6 views
52

Donc j'essaye de faire une chaîne d'une chaîne et une variable passée (qui est un nombre). Comment est-ce que je fais cela?Comment concaténer une chaîne avec une variable?

J'ai quelque chose comme ceci:

function AddBorder(id){ 
    document.getElementById('horseThumb_'+id).className='hand positionLeft' 
} 

Alors, comment puis-je obtenir que « horseThumb » et une carte d'identité en une chaîne?

J'ai essayé toutes les différentes options, j'ai aussi googlé et en plus d'apprendre que je peux insérer une variable dans la chaîne comme ceci getElementById("horseThumb_{$id}") < - (n'a pas fonctionné pour moi, je ne sais pas pourquoi) je n'ai rien trouvé d'utile . Donc toute aide serait très appréciée.

+8

Juste comme vous l'avez fait. Mais si vous voulez être explicite, vous pouvez changer 'id' en' id.toString() '. –

+4

Oui, vous l'avez fait correctement. Si cela ne fonctionne pas, alors quelque chose d'autre est faux, comme s'il n'y avait pas d'élément avec cet ID. –

+1

Ce code: 'getElementById (" horseThumb _ {$ id} ")' n'est pas JavaScript, c'est PHP. Voilà pourquoi ça n'a pas marché pour vous. – Domenic

Répondre

38

Votre code est correct. Peut-être votre problème est que vous ne passez pas un ID à la fonction AddBorder, ou qu'un élément avec cet ID n'existe pas. Ou vous pourriez exécuter votre fonction avant que l'élément en question soit accessible via le DOM du navigateur.

Pour identifier le premier cas ou déterminer la cause du second cas, ajoutez-les comme les premières lignes à l'intérieur de la fonction:

alert('ID number: ' + id); 
alert('Return value of gEBI: ' + document.getElementById('horseThumb_' + id)); 

qui ouvrira ses portes fenêtres pop-up à chaque fois que la fonction est appelée, avec la valeur de id et la valeur de retour de document.getElementById. Si vous obtenez undefined pour le pop-up numéro d'ID, vous ne passez pas un argument à la fonction. Si l'ID n'existe pas, vous obtiendrez votre numéro d'identification (incorrect?) Dans la première fenêtre, mais obtiendrez null dans la seconde.

Le troisième cas se passerait-il si votre page Web ressemble à ceci, en essayant d'exécuter AddBorder pendant le chargement encore:

<head> 
<title>My Web Page</title> 
<script> 
    function AddBorder(id) { 
     ... 
    } 
    AddBorder(42); // Won't work; the page hasn't completely loaded yet! 
</script> 
</head> 

Pour résoudre ce problème, mettre tout le code qui utilise AddBorder l'intérieur d'un événement onload gestionnaire:

// Can only have one of these per page 
window.onload = function() { 
    ... 
    AddBorder(42); 
    ... 
} 

// Or can have any number of these on a page 
function doWhatever() { 
    ... 
    AddBorder(42); 
    ... 
} 

if(window.addEventListener) window.addEventListener('load', doWhatever, false); 
else window.attachEvent('onload', doWhatever); 
+0

Cela ne fonctionnera pas pour certains moteurs JavaScript embarqués - tels que [mJS ] (https://mongoose-os.com/blog/mjs-a-new-approach-to-embedded-scripting/) - conduira à l'erreur comme «erreur de rappel MJS: la conversion de type implicite est interdite». Pour ce cas requis pour utiliser la conversion de type explicite – N0dGrand87

1

C'est comme vous l'avez fait. Et je vais vous donner un petit conseil pour ce genre de choses stupides: il suffit d'utiliser la boîte url du navigateur pour essayer la syntaxe js. par exemple, écrivez ceci: javascript:alert("test"+5) et vous avez votre réponse. Le problème dans votre code est probablement que cet élément n'existe pas dans votre document ... peut-être que c'est dans un formulaire ou quelque chose. Vous pouvez également tester ceci en écrivant dans l'url: javascript:alert(document.horseThumb_5) pour vérifier où est votre erreur.

19

En JavaScript, l'opérateur "+" permet d'ajouter des nombres ou de concaténer des chaînes. si l'un des opérandes est une chaîne "+" concatène, et si ce n'est que des nombres, il les ajoute.

exemple:

1+2+3 == 6 
"1"+2+3 == "123" 
+4

Et juste pour le plaisir quel est le résultat de: '2 +" 3 "- 5'? (pas de triche) –

+0

@pst Est-ce que c'est NaN? –

+0

@pst Hehe, belle question piège. –

4

Ceci peut arriver car le script java autorise parfois des espaces blancs si une chaîne est concaténée avec un nombre. essayez de supprimer les espaces et créez une chaîne, puis passez la dans getElementById.

exemple:

var str = 'horseThumb_'+id; 

str = str.replace(/^\s+|\s+$/g,""); 

function AddBorder(id){ 

    document.getElementById(str).className='hand positionLeft' 

} 
0

Une autre façon de le faire plus simple en utilisant jquery.

échantillon

:

function add(product_id){ 

    // the code to add the product 
    //updating the div, here I just change the text inside the div. 
    //You can do anything with jquery, like change style, border etc. 
    $("#added_"+product_id).html('the product was added to list'); 

} 

Où product_id est le javascript var et $ ("# ajouté _" + product_id) est un div id concaténé avec product_id, le var de fonction add.

Cordialement!

Questions connexes