簡體   English   中英

在javascript函數中傳遞多個參數

[英]passing more than one argument in javascript function

我在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>

更高版本的代碼不起作用。 我究竟做錯了什么 ?

如果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

  1. 不要使用javascript:協議,請使用onclick並返回false
  2. 為什么要完全使用JavaScript ???
  <a href="'index.php?module=Users&action=UsersAjax&file=TemplateMerge&templateid=<?PHP echo $temprow['templateid']; ?>">.....

您需要在參數周圍使用轉義的雙引號

...submittemplate(\"".$temprow['templateid']."\");'>".

因為你傳遞字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM