为什么OnClick不工作

时间:2018-05-19 17:54:42

标签: javascript php

我需要通过$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>

编辑:我澄清说我已经尝试了各种各样的方式,它不起作用,用引号做,但没有任何作用......

2 个答案:

答案 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({&quot;foo&quot;:&quot;bar&quot;})"> 

允许转义的json字符串作为JSON对象传递给hi Javascript函数,(https://jsfiddle.net/4phhe2qm/

答案 1 :(得分:-3)

问题在于你的javascript应该是:

<script type="text/javascript">
 hi=function(text){
  console.log(text);
   }
</script>