web-dev-qa-db-fra.com

paramètre de chaîne de passage dans une fonction onclick

Je souhaite passer un paramètre (une chaîne) à une fonction Onclick. Pour le moment, je fais ceci:

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

avec result.name, par exemple, égal à la chaîne "Add" . Lorsque je clique sur ce bouton, un message d'erreur indique que Add n'est pas défini. Puisque cette fonction fonctionne parfaitement avec un paramètre numérique, je suppose qu’elle a quelque chose à voir avec les symboles "" dans la chaîne . Quelqu'un at-il déjà eu ce problème?

184
Consec

On dirait que vous construisez des éléments DOM à partir de chaînes. Il vous suffit d’ajouter des guillemets autour de result.name:

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

Cependant, vous devriez vraiment faire cela avec les 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 d'un autre élément, result changera avant le déclenchement de l'événement et vous devrez créer une bulle d'étendue supplémentaire pour masquer la variable en cours de modification.

294
david

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

HTML:

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

JavaScript:

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

Quelques préoccupations pour moi en ce qui concerne l'utilisation de string escape dans onClick et, à mesure que le nombre d'arguments augmente, il devient difficile à maintenir.

L'approche suivante aura un clic sur un clic - amenez le contrôle sur une méthode de gestion et méthode, basée sur l'objet événement, peut déduire l'événement click et l'objet correspondant. 

Il fournit également un moyen plus simple d'ajouter plus d'arguments et d'avoir plus de flexibilité.

<button type="button" 
        className="btn btn-default" 
        onClick="invoke" 
        name='gotoNode' 
        data-arg1='1234'>GotoNode</button>

Sur la couche javascript:

  invoke = (event) => {
    let nameOfFunction = this[event.target.name];
    let arg1 = event.target.getAttribute('data-arg1');
    //We can add more args as needed...
    window[nameOfFunction](arg1) 
    //hope function is in window. 
    //Else the respective object need to be used 
    })
  }

L'avantage ici est que nous pouvons avoir autant d'arguments (dans l'exemple ci-dessus, data-arg1, data-arg2 ...) selon les besoins.

20
Sairam Krish

Je devine, vous créez un bouton en utilisant JavaScript lui-même. Donc, le erreur dans votre code est celui, il sera rendu sous cette forme

<input type="button" onClick="gotoNode(add)" />'

À cet état actuel, add sera considéré comme un identifiant comme les variables ou les appels de fonction. Vous devriez échapper à la valeur comme celle-ci

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

C'est une manière agréable et soignée d'envoyer de la valeur ou un objet.

<!DOCTYPE html>
<html>
<body>
<h1  onclick="test('wow',this)">Click on this text!</h1>
<script>
var test =function(value,object){  
object.innerHTML=value;
};     
</script>
</body>
</html>
11
zokaee hamid

Paramètre multiple: 

   bounds.extend(marker.position);
        bindInfoWindow(marker, map, infowindow,
     '<b>' + response[i].driver_name + '</b><br>' + 
     '<b>' +moment(response[i].updated_at).fromNow() + '</b>
      <button onclick="myFunction(\''+response[i].id+'\',\''+driversList+'\')">Click   me</button>'
    );
5
Zahid Rahman

Essaye ça..

HTML:

<button id="a1" type="button" onclick="return a1_onclick('a1')">a1</button> 

JavaScript:

<script language="javascript" type="text/javascript">
    function a1_onclick(id) {
        document.getElementById(id).style.backgroundColor = "#F00";   
    }
</script>

Remarque: assurez-vous d'envoyer des arguments entre les signes '' tels que ('a1') dans le code html

5
Mawardy

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

Fiddle référence.

Javascript:

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

HTML:

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

si votre bouton est généré dynamiquement:

Vous pouvez passer des paramètres de chaîne à des fonctions javascript comme ci-dessous:

J'ai passé 3 paramètres, le troisième étant un paramètre de chaîne, j'espère que cela aidera.

var btn ="<input type='button' onclick='RoomIsReadyFunc("+ID+","+RefId+",\""+YourString+"\");'  value='Room is Ready' />";

//your javascript function

function RoomIsReadyFunc(ID, RefId, YourString)
{
  alert(ID);
  alert(RefId);
  alert(YourString);
}
3
Mehdi Jalal

aussi vous utilisez le symbole accent grave (`) dans la chaîne

essayez:

`<input type="button" onClick="gotoNode('${result.name}')" />`

pour plus d'informations, visitez MDN et Stackoverflow

Par Chrome, Edge, Firefox (Gecko), Opera, Safari, mais pas Internet Explorer.

2
MJ Vakili

Vous pouvez passer une référence ou une valeur de chaîne en plaçant simplement une fonction entre "" asp sous l'instantané

enter image description here

1
Ayaat Shifa

Pour transmettre plusieurs paramètres, vous pouvez transtyper la chaîne en la concaténant avec la valeur ASCII, comme pour les guillemets simples, nous pouvons utiliser '

var str= "&#39;"+ str+ "&#39;";
1
Mr-Tc

si utiliser pour générer un ensemble de boutons avec différents paramètres de gestionnaires . https://www.w3schools.com/js/js_function_closures.asp

let some_button = document.createElement( "button" );
some_button.type = "button";

some_button.onclick = doWithParam( some_param );

function doWithParam( param ){
   return function(){
      alert( param );//<------Your code here
   }
}

si nous faisons:

some_button.onclick = foo( some_param );
function foo( param ){
    alert( param );
}

puis fonction foo start après chaque page de mise à jour.

si nous faisons:

for( let i = 0; i < 10; ++i ){
    var inputElement = document.createElement('input');
    inputElement.type = "button"
    inputElement.addEventListener('click', function(){
        gotoNode(result.name);
    });

​   document.body.appendChild(inputElement);​
}

puis pour tous les boutons créés dans la boucle, la dernière valeur du paramètre "result.name"

si vous utilisez asp, vous pouvez utiliser javascript:

HTML:

<input type='button' value='test' onclick='javascript: EditSelectedOptionName(x,y)' />"

Javascript:

function EditSelectedOptionName(id, name) {
        console.log(id);
        console.log(name);
 }
0
Abdullah Tahan

Voici une solution JQuery que j'utilise.

Jquery

$("#slideshow button").click(function(){
    var val = $(this).val();
    console.log(val);
});

HTML

<div id="slideshow">
    <img src="image1.jpg">
    <button class="left" value="back">&#10094;</button>
    <button class="right" value="next">&#10095;</button>
</div>
0
DamianToczek

Pour transmettre plusieurs paramètres, vous pouvez transtyper la chaîne en la concaténant avec la valeur ASCII. Par exemple, vous pouvez utiliser &#39; pour les guillemets simples.

var str= "&#39;"+ str+ "&#39;";

le même paramètre que vous pouvez transmettre à l'événement onclick(). Dans la plupart des cas, il fonctionne avec tous les navigateurs. 

0
PVIJAY