【问题标题】:JavaScript href onclick not working with PerlJavaScript href onclick 不适用于 Perl
【发布时间】:2011-07-22 19:38:07
【问题描述】:

以下是我的代码。我所有的按钮功能都可以正常工作,但是如果我单击链接,则应记住服务器的值,并且应使用参数视图和子系统再次重新加载页面。

但是当我重新加载时,服务器的值是空的。

my $server = $q->param('server') ;
my $unit = $q->param('unit') ;

my $bfile = __FILE__ ;
$bfile = `basename $bfile` ;
chomp $bfile ;

print "<form name=\"form1\" action =\"/cgi-bin/$bfile\" onsubmit=\"javascript:onsubmitform(doc_press)\">";

print "<input type=\"hidden\" name=\"server\" id=\"server\">";
print "<input type=\"hidden\" name=\"unit\" id=\"unit\">";
print "\n\n<input type=submit name=view value=\"View\" onClick=\"doc_press=this.value\">";
print "<input type=submit name=save value=\"Save\" onClick=\"doc_press=this.value\">";

print $var{$a}."<a href=\"/cgi-bin/$bfile?view=5&SUBSYS=$subsys\" onClick=javascript:click_page(\"$_\")>CLICK</a>\n" ;

print <<"END_OF_SCRIPT";
<script type="text/javascript">
function onsubmitform(doc_press) {
        if (doc_press == "View"){
                document.getElementById('unit').value="$unit";
        }
        else if (doc_press == "Save") {
END_OF_SCRIPT
             var x = "$user=$val";
             document.cookie=x;
             document.getElementById('unit').value="$unit";
        }
        if (document.getElementById('HTTP_TYPE').value == "post") {
                document.form1.method='post';
        }
        else if(document.getElementById('HTTP_TYPE').value == "get") {
                document.form1.method='get';
        }
}

function click_page(server){
        document.getElementById('server').value=server;
}
</script>
END

【问题讨论】:

  • javascript: 不属于 onsomething="" 处理程序。它不是 URL 而是 JavaScript 代码!此外,如果您使用 XHTML,它的属性必须完全小写,即onclick
  • 此代码甚至无法编译,提供您的真实代码。代码中至少缺少 6 个声明。
  • 您知道您的字符串中不需要所有这些 \" 对吗?使用 qq{} 和瞧: print qq{go }; 更好的是,使用模板系统(我喜欢 Text::Template 的简单性,但 Template Toolkit 也很受欢迎)
  • @daxim:我只是给你参考代码,这样你就可以理解我的问题。我的整个程序是保密的。所以我不能在这里提供..谢谢
  • @mirod:谢谢你。但我已经习惯了......所以如果我也改变它会让我感到困惑......

标签: javascript perl onclick href


【解决方案1】:

当您单击链接 (&lt;a href="..."/&gt;) 时,浏览器将对给定链接发出新的 GET 请求,而不管您可能有任何形式。这意味着您的表格未提交;因此表单中的任何值都将丢失。因此,您在此处发布的 onclick 处理程序毫无用处。

有时,如果您真的链接到同一个页面,现代浏览器足够智能,可以识别并填写您已经拥有的值。这对于如果不保留其值而感到沮丧的用户来说只是一种商品,因此这不适用于隐藏字段。

如果您想点击链接提交表单,您应该 a) 使用按钮,或 b) 更改 onclick 处理程序以提交表单并返回 false(这样链接就不会被点击):

function click_page(server){
    document.getElementById('server').value=server;
    document.forms[0].submit();
    return false;
}

要使其正常工作,还要更改 onclick 声明:

<a href="..." onclick="return click_page('$_')">CLICK</a>

【讨论】:

  • 嗨,它工作了,谢谢.. 但我需要链接,因为我在该链接中有更多新参数,在重新加载时也需要考虑。有没有其他方法可以解决这个问题?
  • 如果您的表单有method="GET",那么表单将被发布到action 属性中指定的URL,所有表单的值都附加到URL 的查询字符串中。我看到你已经在别处摆弄表单的方法了;为什么不在这里再做一次?
  • 我已更改操作值。但它没有改变。我不知道为什么。它需要我之前定义的链接。
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 2013-05-24
  • 1970-01-01
  • 2011-04-07
  • 2023-03-27
  • 1970-01-01
  • 2021-10-23
  • 2018-03-10
相关资源
最近更新 更多