skicka en strängparameter i en onclick-funktion

Jag vill skicka en parameter (dvs. en sträng) till en Onclick-funktion. För tillfället gör jag så här:

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

med result.name till exempel lika med strängen "Add". När jag klickar på den här knappen får jag ett felmeddelande som säger att Add inte är definierat. Eftersom detta funktionsanrop fungerar perfekt med en numerisk parameter antar jag att det har något att göra med symbolerna "" i strängen. Har någon haft detta problem tidigare?

Lösning

Det ser ut som om du bygger DOM-element från strängar. Du behöver bara lägga till några citationstecken runt result.name:

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

Du borde dock göra detta med riktiga DOM-metoder.

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

​document.body.appendChild(inputElement);​

Var bara medveten om att om detta är en slinga eller något, kommer result att ändras innan händelsen utlöses och du måste skapa en extra scope-bubbla för att skugga den förändrade variabeln.

Kommentarer (11)

Jag föreslår att du inte ens använder HTML-hanterare för onclick, utan använder något mer vanligt som document.getElementById.

HTML:

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

JavaScript:

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

Redigerad: Om kravet är att referera till det globala objektet (js) i din HTML-kod kan du prova detta. [Använd inga citationstecken (' eller ") runt variabeln]

[Fiddle][1] referens.

Javascript:

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

HTML:

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