如何在Perl中通过onclick事件提交按钮调用Javascript函数?

问题描述:

我试图通过onclick事件的提交按钮,但不能够, 我的代码的详细信息是“我有一个名为过滤器的按钮和两个文本框,它采取Id和名称, 我想要的全部是”当我进入编号文本框中的值,然后单击筛选,然后我想在使用查询字符串” URL要显示的值。 这里的代码..如何在Perl中通过onclick事件提交按钮调用Javascript函数?

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> 

请帮我找出解决办法,谢谢。

+1

您应该包含更多细节,比如'$ Id'和'$ Name'的值,以及代码生成的实际HTML。另外,当你点击按钮时会发生什么? – cjm 2010-10-11 06:01:44

+0

你可以检查它,'$ Id'和'$ Name'是否用'onClick = \“FilterExpression($ Id,$ Name)\”'替换它们的值? – 2010-10-11 06:06:48

+2

请包括功能调用者的HTML输出。换句话说,在您的浏览器中,查看源代码并复制由'print'生成的html​​”;'。 – gilly3 2010-10-11 06:50:54

  1. 如果使用<形式>你可以使用method =“得到”是很容易的方式。
  2. 如果你不想使用<形式>请加 “ID” 为

< INPUT TYPE = \ “文本\” ID = 'USER_ID' NAME = \ “USER_ID \” 值= \ “” $ id。“\”size = \“6 \”>

并且写这样的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 
} 
+0

非常感谢我使用第二种方法(不使用表单)的回复,我编辑了代码“NOW AM GETTING THE VALUES IN ALERT BOX,但是无法将这些值发送到URL,即window.location =”UsersList .cgi?id =“+ val3 +”&Name =“+ val4语句无法正常工作,请问这是否有其他方法?请回复 – SUSH 2010-10-11 10:55:12

+0

您可以测试简单的网址,例如(http://google.com或List.cgi )? – cloverink 2010-10-11 11:19:15

+0

也许,你应该使用location.href =“http://www.cloverink.com”; – cloverink 2010-10-11 11:26:06

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

+3

根据“$ Id”和“$ Name”可以采用哪些值,您可能需要更多的引用来避免XSS安全性(想想如果'$ Name'以'>开头,会发生什么'>

你的问题来自尝试做复杂和难以管理的报价和逃生。

如果你曾经在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代。