我有一段代码,如下所示,

$(document).ready(function(){
  var agr1='#19865 - testArg';
  var arg2=1856
  $('#dv_Test').append('<button onclick="testFunction('+ agr1 +','+ arg2 +')">Test</button>')
});
function testFunction(arg1, arg2) {
  alert(arg1);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dv_Test"></div>


在这里我收到如下错误
testFunction(#19865 - testArg,1856)



我的字符串 agr1 本身没有 ""
我该如何解决这个问题?

最佳答案

问题是因为 arg1 值是一个字符串,需要用引号括起来:

$(document).ready(function() {
  var agr1 = '#19865 - testArg';
  var arg2 = 1856
  $('#dv_Test').append('<button onclick="testFunction(\'' + agr1 + '\',' + arg2 + ')">Test</button>')
});

function testFunction(arg1, arg2) {
  alert(arg1);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dv_Test"></div>


然而,更好的方法是将这些值放在 data 属性中,并添加一个单独的委托(delegate)事件处理程序来处理所有动态创建的按钮。试试这个:

$(document).ready(function() {
  var agr1 = '#19865 - testArg';
  var arg2 = 1856
  var $div = $('#dv_Test').append('<button data-arg1="' + agr1 + '" data-arg2="' + arg2 + '">Test</button>');

  $div.on('click', 'button', function() {
    var $btn = $(this);
    console.log($btn.data('arg1'), $btn.data('arg2'));
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dv_Test"></div>

关于javascript - 在从 Javascript 附加的 onclick 函数中传递参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54005968/

10-11 10:20