如何从Perl中提交按钮的onclick事件调用Javascript函数?

时间:2010-10-11 05:57:36

标签: javascript perl

我试图通过提交按钮的onclick事件触发javascript但不能, 我的代码的详细信息是“我有一个名为filter的按钮和两个带有Id和Name的文本框, 我想要的是“当我在Id文本框中输入值并单击过滤器然后我希望使用QueryString在URL上显示值”。 这是代码..

    print "<td><b>UserId</b></td><td><input type=\"text\" name=\"User_Id\" 
        value=\"" .$Id."\"  size=\"6\" ></td>";
    print "<td><b>UserName</b></td><td><input type=\"text\" name=\"User_Name\"
      value=\"" .$Name  ."\" size=\"10\"></td>";
    print "<td><input type=\"submit\" name=\"Filter\" value=\"Filter\" 
              onClick=\"FilterExpression($Id,$Name)\"></td>"; 

点击过滤后,此代码被执行..

          if ( $q->param("Filter") )
               { 
                $Id=$q->param('User_Id');
                $Name=$q->param('User_Name');
          if ($Id ne "" )
                {
            $filterexpression= $filterexpression." UserId like '" .$Id. "%' and " ;
                }
          if ($Name ne "" )
                {
           $filterexpression= $filterexpression." UserName like '" .$Name. "%' and " ;
                }
             } 

Javascript ..

    <script type="text/javascript">
function FilterExpression(Id,Name)
         {
          var val3=Id;
          var val4=Name
           window.location="List.cgi?Id="+val3+"&Name="+val4
           }
     </script>

请帮我找到解决方案,谢谢。

3 个答案:

答案 0 :(得分:3)

看起来您可能需要报价。试试onClick=\"FilterExpression('$Id','$Name')\"

答案 1 :(得分:3)

  1. 如果您使用&lt; form&gt;你可以使用method =“get”是一种简单的方法。
  2. 如果您不想使用&lt; form&gt;请将“id”添加到
  3. &lt; input type = \“text \”id ='User_Id'name = \“User_Id \”value = \“”。$ Id。“\”size = \“6 \”&gt;

    并编写这样的Javascript。

    function FilterExpression()
    {
    var val3=document.getElementById("User_Id").value;
    var val4=document.getElementById("User_Name").value;
    window.location="List.cgi?Id="+val3+"&Name="+val4
    }
    

答案 2 :(得分:1)

你的问题来自于尝试复杂且难以管理报价和逃避。

如果你必须在Perl程序中逃避引号,很可能,你做错了。

Perl具有many different ways to quote strings,可以轻松管理字符串和填充变量值。强大的引用操作符使得引用字符的转义极为罕见。

我将向您展示几个例子。

您的示例可以使用interpolating here-doc处理:

my $filter_expression = FilterExpression($Id,$Name);

print <<"END_HTML";
<td><b>UserId</b></td><td><input type="text" name="User_Id" value="$Id"  size=\"6\" ></td>"
<td><b>UserName</b></td><td><input type="text" name="User_Name" value="$Name" size="10"></td>
<td><input type="submit" name="Filter" value="Filter" onClick="$filter_expression"></td>
END_HTML

或者您可以使用the qq operator来引用汇总输出:

print qq{<td><b>UserId</b></td><td><input type="text" name="User_Id" value="$Id"  size="6" ></td>};

print qq[<td><b>UserName</b></td><td><input type="text" name="User_Name" value="$Name" size="10"></td>];

print qq(<td><input type="submit" name="Filter" value="Filter" onClick=."$filter_expression"></td>); 

或者,如果您坚持避免插值,只需使用single quote

print '<td><b>UserId</b></td><td><input type="text" name="User_Id" value="'
      .$Id
      .'"  size=\"6\" ></td>';

print '<td><b>UserName</b></td><td><input type="text" name="User_Name" value="'
      .$Name
      .'" size=\"10\"></td>';

print '<td><input type="submit" name="Filter" value="Filter"  onClick="'
      .FilterExpression($Id,$Name)
      .'"></td>';

另外,请认真考虑使用模板系统来处理HTML生成。