我需要通过$rec ['text']
将onclick
发送到javascript函数,我的代码如下:
foreach($arr_r as $rec){
$manjar = json_encode($rec['text']);
echo '<div id="my-div3"><input type="button" onClick= "hi(\'' . $manjar . '\')";>';
}
和JavaScript:
<script type="text/javascript">
function hi(text){
console.log(text);
}
</script>
问题是,在$rec ['text']
中有文字...但我需要将其传递给javascript,我总是收到错误Uncaught SyntaxError console: Invalid or unexpected token
如果我发送hi("text")
,如果它有效,但$ rec ['text']
却没有... {/ p>
编辑:我澄清说我已经尝试了各种各样的方式,它不起作用,用引号做,但没有任何作用......
答案 0 :(得分:0)
假设$rec['text']
是一个合适的值,例如数组或对象,json_encode
将生成一个字符串,该字符串使用未转义的双引号来定义属性名称和值。例如{"foo":"bar"}
这将导致您的输入字段使用那些未转义的引号,并且浏览器会尝试将它们作为单独的属性呈现。
导致<input onClick="hi('{"foo":"bar"}')">
技术上无效的HTML语法,因为引号是浏览器确定属性值结束的方式。导致浏览器处理生成的HTML类似于:
<input onClick="hi('{" foo":" bar"}')">
注意与引号和红色文本的分离以说明各个属性。
要绕过这个问题,您需要使用htmlentities
来转义引号,以便浏览器呈现引擎不会将它们视为属性值声明。请参阅:How to properly escape quotes inside html attributes? 在输出将在HTML中显示的任何PHP值时,这也被视为最佳做法。
<?php
foreach ($arr_r as $rec) {
$manjar = htmlentities(json_encode($rec['text']), ENT_QUOTES, 'UTF-8', false);
?>
<input type="button" onClick="hi(<?php echo $manjar; ?>)">
<?php } ?>
这将输出有效的HTML语法:(https://3v4l.org/uKlcv)
<input type="button" onClick="hi({"foo":"bar"})">
允许转义的json字符串作为JSON对象传递给hi
Javascript函数,(https://jsfiddle.net/4phhe2qm/)
答案 1 :(得分:-3)
问题在于你的javascript应该是:
<script type="text/javascript">
hi=function(text){
console.log(text);
}
</script>