<div id="test" onclick="someFunction('<?=$some_id[1]?>', this);"><span ></span></div>
我正在尝试将 PHP 变量传递给内联 javascript 函数;但是,当此函数执行 onclick 时,它会引发错误(Firebug 控制台):
SyntaxError: unterminated string literal
someFunction('
<div id="test" onclick="someFunction('<?=$some_id[1]?>', this);"><span ></span></div>
我正在尝试将 PHP 变量传递给内联 javascript 函数;但是,当此函数执行 onclick 时,它会引发错误(Firebug 控制台):
SyntaxError: unterminated string literal
someFunction('
我这样做的方法是将它编码为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 有自己的引号。
您确定可以在您的托管服务上使用 PHP 短标签吗?
为了测试,我会尝试:
<div id="test" onclick="someFunction('<?php echo $some_id[1]; ?>', this);"><span></span</div>
“someFunction”是否需要第一个变量的字符串或整数?因为如果它需要一个整数,你可能不需要在变量周围加上单引号。
这都是假设 $some_id[1] 包含一个整数值。
唯一可以直接传递给事件的是事件对象,这是不使用内联 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>