我在Php中有一个预先编写的代码,其中JavaScript函数被称为
echo "<a href='javascript:submittemplate(".$temprow['templateid'].");'>".$temprow["templatename"]."</a></td>";
脚本是:
<script>
function submittemplate(templateid)
{
window.document.location.href = 'index.php?module=Users&action=UsersAjax&file=TemplateMerge&templateid='+templateid;
}
</script>
现在我想在这个函数中再传递一个参数。
我做的是:
echo "<a href='javascript:submittemplate(".$temprow['templateid'].",".$mode.");'>".$temprow["templatename"]."</a></td>";
<script>
function submittemplate(templateid,mode)
{
alert("anything");
window.document.location.href = 'index.php?module=Users&action=UsersAjax&file=TemplateMerge&templateid='+templateid;
}
</script>
Later代码不起作用。我做错了什么?
如果mode
变量是string
,则会引发错误。
例如alert(myString Is Here) // throw error
应该是alert("myString Is Here");
所以你必须添加报价如下:
echo "<a href='javascript:submittemplate(".$temprow['templateid'].",'"".$mode."'");'>"
注意'"
我猜您会因为输出的值而产生无效的Javascript语法。打开浏览器的Javascript控制台来调试Javascript并查看任何错误。
当将PHP值输出到Javascript时,应该确保它们不会破坏语法。最好的方法是对它们进行JSON编码,因为JSON是有效的Javascript。正如您也应该用HTML对您的值进行HTML编码一样:
<a href="javascript:submittemplate(<?php echo htmlspecialchars(json_encode($temprow['templateid']), ENT_COMPAT); ?>, <?php echo htmlspecialchars(json_encode($mode), ENT_COMPAT); ?>);"><?php echo htmlspecialchars($temprow["templatename"]); ?></a></td>
由于这是一个非常不可读的单行,您应该考虑使用Javascript将onclick
事件绑定到链接,而不是使用href="javascript:"
目标。看见http://en.wikipedia.org/wiki/Unobtrusive_Javascript#Separation_of_behavior_from_markup.
- 不要使用javascript:协议,使用onclick并返回false
- 为什么要使用JavaScript
<a href="'index.php?module=Users&action=UsersAjax&file=TemplateMerge&templateid=<?PHP echo $temprow['templateid']; ?>">.....
您需要在参数周围使用转义双引号
...submittemplate('"".$temprow['templateid']."'");'>".
因为您正在传递字符串