siirtää merkkijonoparametri onclick-funktiossa

Haluaisin siirtää parametrin (eli merkkijonon) Onclick-funktioon. Tällä hetkellä teen näin:

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

jossa result.name on esimerkiksi yhtä suuri kuin merkkijono "Add". Kun napsautan tätä painiketta, saan virheilmoituksen, jossa sanotaan, että Lisää ei ole määritelty. Koska tämä funktiokutsu toimii täydellisesti numeerisen parametrin kanssa, oletan, että sillä on jotain tekemistä merkkijonossa olevien symbolien "" kanssa. Onko kenelläkään ollut tätä ongelmaa aiemmin?

Ratkaisu

Näyttää siltä, että rakennat DOM-elementtejä merkkijonoista. Sinun tarvitsee vain lisätä lainausmerkit result.name:n ympärille:

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

Sinun pitäisi kuitenkin tehdä tämä oikeilla DOM-metodeilla.

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

​document.body.appendChild(inputElement);​

Ota vain huomioon, että jos tämä on silmukka tai jotain, result muuttuu ennen tapahtuman laukeamista ja sinun täytyy luoda ylimääräinen scope-kupla, joka varjostaa muuttuvaa muuttujaa.

Kommentit (11)

Suosittelen, että et edes käytä HTML:n onclick-käsittelijöitä, vaan käytät jotain yleisempää, kuten document.getElementById.

HTML:

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

JavaScript:

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

Muokattu: Jos vaatimuksena on viitata globaaliin objektiin (js) HTML-koodissasi, voit kokeilla tätä. [Älä käytä lainausmerkkejä (' tai ") muuttujan ympärillä].

[Fiddle][1] viittaus.

Javascript:

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

HTML:

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