如何在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>
请帮我找出解决办法,谢谢。
- 如果使用<形式>你可以使用method =“得到”是很容易的方式。
- 如果你不想使用<形式>请加 “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 }
非常感谢我使用第二种方法(不使用表单)的回复,我编辑了代码“NOW AM GETTING THE VALUES IN ALERT BOX,但是无法将这些值发送到URL,即window.location =”UsersList .cgi?id =“+ val3 +”&Name =“+ val4语句无法正常工作,请问这是否有其他方法?请回复 – SUSH 2010-10-11 10:55:12
您可以测试简单的网址,例如(http://google.com或List.cgi )? – cloverink 2010-10-11 11:19:15
也许,你应该使用location.href =“http://www.cloverink.com”; – cloverink 2010-10-11 11:26:06
看起来你可能需要报价。尝试onClick=\"FilterExpression('$Id','$Name')\"
根据“$ 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代。
您应该包含更多细节,比如'$ Id'和'$ Name'的值,以及代码生成的实际HTML。另外,当你点击按钮时会发生什么? – cjm 2010-10-11 06:01:44
你可以检查它,'$ Id'和'$ Name'是否用'onClick = \“FilterExpression($ Id,$ Name)\”'替换它们的值? – 2010-10-11 06:06:48
请包括功能调用者的HTML输出。换句话说,在您的浏览器中,查看源代码并复制由'print'生成的html”;'。 – gilly3 2010-10-11 06:50:54