passer un paramètre de type chaîne dans une fonction onclick

Je voudrais passer un paramètre (c'est-à-dire une chaîne) à une fonction Onclick. Pour l'instant, je fais ceci :

'<input type="button" onClick="gotoNode(' + result.name + ')" />'

avec result.name par exemple égal à la chaîne "Add&quot ;. Lorsque je clique sur ce bouton, j'ai une erreur qui dit que Add n'est pas défini. Comme cet appel de fonction fonctionne parfaitement avec un paramètre numérique, je suppose que cela a quelque chose à voir avec les symboles "&quot ; dans la chaîne de caractères. Quelqu'un a-t-il déjà rencontré ce problème ?

Solution

Il semble que vous construisiez des éléments DOM à partir de chaînes de caractères. Vous devez juste ajouter des guillemets autour de result.name :

'<input type="button" onClick="gotoNode(\'' + result.name + '\')" />'

Vous devriez vraiment faire cela avec des méthodes DOM appropriées.

var inputElement = document.createElement('input');
inputElement.type = "button"
inputElement.addEventListener('click', function(){
    gotoNode(result.name);
});

​document.body.appendChild(inputElement);​

Sachez simplement que s'il s'agit d'une boucle ou autre, result changera avant que l'événement ne se déclenche et vous devrez créer une bulle de portée supplémentaire pour suivre la variable qui change.

Commentaires (11)

Je suggère de ne même pas utiliser les gestionnaires HTML onclick, et d'utiliser quelque chose de plus commun comme document.getElementById.

HTML :

<input type="button" id="nodeGoto" />

JavaScript :

document.getElementById("nodeGoto").addEventListener("click", function() {
    gotoNode(result.name);
}, false);
Commentaires (6)

Modifié : Si l'exigence est de référencer l'objet global (js) dans votre code HTML, vous pouvez essayer ceci. [N'utilisez pas de guillemets (&#39 ; ou &quot ;) autour de la variable].

[Fiddle][1] référence.

Javascript :

var result = {name: 'hello'};
function gotoNode(name) {
    alert(name);
}

HTML :

<input value="Hello" type="button" onClick="gotoNode(result.name)" />​

[1] : http://jsfiddle.net/gaJTb/

Commentaires (5)