【问题标题】:How do you pass in a PHP variable into an inline javascript function?如何将 PHP 变量传递给内联 javascript 函数?
【发布时间】:2013-11-13 01:12:00
【问题描述】:
<div id="test" onclick="someFunction('<?=$some_id[1]?>', this);"><span ></span></div>

我正在尝试将 PHP 变量传递给内联 javascript 函数;但是当这个函数执行 onclick 时,它会抛出错误(Firebug 控制台):

SyntaxError: unterminated string literal

someFunction('

【问题讨论】:

  • $some_id[1]的值是多少?
  • 您是否动态创建此代码,即在页面加载之后?如果是这样,这将不起作用。

标签: javascript php html


【解决方案1】:

我这样做的方式是把它编码成json:

echo "someFunction(".htmlentities(json_encode($some_id[1]), ENT_QUOTES).", this);";

或者如果你在 html 上下文中:

someFunction(<?php echo htmlentities(json_encode($some_id[1]), ENT_QUOTES); ?>, this);

json_encode 将从各种数据类型(包括字符串、数字等)中生成正确的 javascript 字符串。然后在向 html 添加任何内容时应始终使用 htmlentities 以确保引号不会破坏该输出。

请注意,我确实没有在字符串中添加引号 - 如果需要,json 有自己的引号。

【讨论】:

    【解决方案2】:

    您确定可以在您的托管服务上使用 PHP 短标签吗?

    为了测试,我会尝试:

    <div id="test" onclick="someFunction('<?php echo $some_id[1]; ?>', this);"><span></span</div>
    

    “someFunction”是否需要字符串或整数作为第一个变量?因为如果它需要一个整数,你可能不需要在变量周围加上单引号。

    这都是假设 $some_id[1] 包含一个整数值。

    【讨论】:

      【解决方案3】:

      唯一可以直接传递给事件的是事件对象,这是不使用内联 JavaScript 的另一个原因。当然,您的 PHP 必须先编写,否则您应该研究 AJAX 解决方案。您的代码应该看起来更像:

        <script type='text/javascript'>
          var doc = document;
          function E(e){
            return doc.getElementById(e);
          }
          var tst = E('test');
          function anotherFunc(arg1, element){
            // do stuff here
          }
          tst.onclick = function(){
            anotherFunc('<?=$some_id[1];?>', this);
          }
        </script>
      </body>
      </html>
      

      【讨论】:

      • 如果启用了 php 短标签,= 不需要回显。如果未启用短标签,则 = 根本不起作用。最好使用完整的 而不是 = 无论如何,因为短版本通常在很多主机上被禁用。
      • 感谢短标签 cmets。固定。
      猜你喜欢
      • 2015-06-08
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      相关资源
      最近更新 更多