如何在HTML中追加含两个变量的JavaScript函数?字符串参数传递异常
解决JavaScript字符串变量传递到内联onclick的引号问题
我完全懂你碰到的麻烦——你在拼接HTML字符串的时候,字符串类型的value.comment没有被引号包裹,导致生成的onclick代码里它变成了无引号的形式(比如test而不是"test"),浏览器会把它当作一个未定义的变量,自然就触发了错误。
快速修复:给字符串参数添加引号
你只需要在拼接的时候,用转义的双引号把value.comment包裹起来就行,这样生成的HTML里就会正确带上引号:
var url = '{{URL::to('calendar/comments')}}'; $.getJSON(url+"/"+data.id, function(data) { ul.append(" <li> <a href='#' onclick='openmodal("+value.id+", \""+value.comment+"\")'> Modifier </a> </li>" ); });
这里的\"是转义后的双引号,它会在最终的HTML里渲染成普通的双引号,让value.comment被正确识别为字符串参数。
更推荐的方案:避免内联事件绑定
其实内联onclick这种写法很容易遇到转义、特殊字符的问题,而且代码耦合度高。更优雅的做法是用jQuery的事件绑定来处理:
var url = '{{URL::to('calendar/comments')}}'; $.getJSON(url+"/"+data.id, function(data) { // 创建a元素 var $link = $('<a href="#">Modifier</a>'); // 绑定点击事件,直接传递变量 $link.on('click', function() { openmodal(value.id, value.comment); }); // 把a元素放入li,再追加到ul $('<li></li>').append($link).appendTo(ul); });
这种方式不需要处理任何字符串拼接和转义,直接在事件回调里使用原始变量,就算value.comment里包含引号、换行这类特殊字符也不会出问题,代码也更易维护。
内容的提问来源于stack exchange,提问作者user9557101
相关产品推荐
相关产品推荐

