在onclick函数中传递string参数

我想传递一个参数(即一个string)到一个Onclick函数。 目前,我这样做:

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

与result.name例如等于string“添加”。 当我点击这个button,我有一个错误,说没有定义添加。 由于这个函数调用完美的数字参数,我假设它与string中的符号“”有关。 有没有人有过这个问题?

这看起来像你从string构buildDOM元素。 你只需要在result.name中添加一些引号:

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

尽pipe如此,你应该用适当的DOM方法来做到这一点。

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

只要知道,如果这是一个循环或者什么的, result会在事件触发前发生变化,你需要创build一个额外的范围气泡来遮蔽变化的variables。

我build议不要使用HTML onclick处理程序,并使用更常见的东西,如document.getElementById

HTML:

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

JavaScript的:

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

我猜测,你正在使用JavaScript本身创build一个button。 所以,你的代码中的错误是,它会以这种forms呈现

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

在这个当前状态下, add会被认为是variables或函数调用的标识符。 你应该逃避这样的价值

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

这是发送价值或对象的一种不错的方式。

 <!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> 

对于我在onClick中使用string转义方面的担心以及随着参数数目的增长,维护起来会变得很麻烦。

下面的方法将有一个单跳 – 单击 – 将控件带到一个处理程序方法和处理程序方法,根据事件对象,可以扣除点击事件和相应的对象。

它还提供了一个更清晰的方式来添加更多的参数和更多的灵活性。

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

在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 }) } 

这样做的好处是我们可以根据需要拥有尽可能多的参数(在上面的例子中,data-arg1,data-arg2 ….)。


已编辑:如果需要在您的HTML代码中引用全局对象(js),则可以尝试此操作。 [不要在variables周围使用任何引号('或')]

小提琴参考。

使用Javascript:

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

HTML:

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

多个参数:

  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>' ); 

尝试这个..

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> 

注意: 一定要在html代码中的('a1')之类的符号之间发送参数

你也在string中使用重音符号(`)

尝试:

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

有关更多信息,请访问MDN和Stackoverflow

通过Chrome,Edge,Firefox(Gecko),Opera,Safari支持,但不支持Internet Explorer。

你可以传递引用或string值,只需将函数放在快照下面的doube逗号“”中

在这里输入图像说明

为了传递多个参数,你可以通过连接string来转换string,就像单引号一样,我们可以使用'

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

为了传递多个参数,你可以通过将string与ASCII值连接来转换string。对于单引号,我们可以使用&#39;

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

您可以将相同的parameter passing给onclick()事件。在大多数情况下,它适用于每个浏览器。

  <style type="text/css"> #userprofile{ display: inline-block; padding: 15px 25px; font-size: 24px; cursor: pointer; text-align: center; text-decoration: none; outline: none; color: #fff; background-color: #4CAF50; //#c32836 border: none; border-radius: 15px; box-shadow: 0 9px #999; width: 200px; margin-bottom: 15px; } #userprofile:hover { background-color: #3e8e41 } #userprofile:active { background-color: #3e8e41; box-shadow: 0 5px #666; transform: translateY(4px); } #array { border-radius: 15px 50px; background: #4a21ad; padding: 20px; width: 200px; height: 900px; overflow-y: auto; } </style> if(data[i].socketid!=""){ $("#array").append("<button type='button' id='userprofile' class='green_button' name="+data[i]._id+" onClick='chatopen(name)'>"+data[i].username+"</button></br>"); }else{ console.log('null socketid >>', $("#userprofile").css('background-color')); //$("#userprofile").css('background-color','#c32836 ! important'); $("#array").append("<button type='button' id='userprofile' class='red_button' name="+data[i]._id+" onClick='chatopen(name)'>"+data[i].username+"</button></br>"); $(".red_button").css('background-color','#c32836'); }