2

我有下面的 java 脚本函数,我想在其中将页面重定向到另一个页面。我验证了警报功能显示了“得到”消息。因此,该函数被正确调用。但是,带有 window.location.href 的页面重定向不起作用。此外,打印选项内容的警报功能,vDaeId,dgpId没有执行(我没有在浏览器中看到弹出窗口)。你能告诉我这段代码有什么问题吗?谢谢。我正在使用 Firefox 顺便说一句。

        function goToPMDisplayer(){
            alert('Got '); 
            var option=document.getElementById("D1").value;
            var vDaeId=document.getElementById("D2").value;
            var dgpId=document.getElementById("dgpids").value;
            var str= option + " "+ vDaeId + " "+ dgpId
            alert(str); 
            window.location.href="display.jsp?option="+option + "&vdaeid=" + vDaeId + "&dgpid=" + dgpId

        }
4

2 回答 2

5

您说第一个警报有效,而第二个无效,这意味着其中一行有 javascript 错误:

var option=document.getElementById("D1").value;
var vDaeId=document.getElementById("D2").value;
var dgpId=document.getElementById("dgpids").value;

最可能的罪魁祸首是这些元素之一不存在,并且尝试访问.valueofnull将引发异常。

于 2012-05-16T14:11:19.537 回答
3

此外,打印选项内容的警报功能,vDaeId,dgpId没有执行(我没有在浏览器中看到弹出窗口)。

这告诉我们代码因抛出异常而失败。我的猜测是,您至少没有一个您所依赖的元素(D1、、D2dgpids)。所以document.getElementById返回null,当你尝试访问.value它时,你会得到一个异常。

请注意,您使用的字符串getElementById必须是id值,而不是names。所以你必须id="D1"在一个元素上,id="D2"在另一个元素上,在另一个元素id="dgpids"上。另请注意,id值可以区分大小写,并且它们在页面上必须是唯一的。(如果您弄乱了最后一条规则,大多数浏览器都会按文档顺序为您提供第一个,但是...)

我假设您在goToPMDisplayer页面完全加载之前不会调用它,但是如果您在页面加载期间调用它,请确保在元素存在之后才调用它(例如,将调用放在文档比元素)。


对于这样的问题,alert-style 调试在几年前就消失了。在 2012 年,我们使用适当的调试器。如今,所有主流浏览器都内置了一个,甚至 IE。您可以设置断点、遍历代码、检查 DOM 的当前状态……总之,无需在黑暗中摸索;您可以了解正在发生的事情。


在对该问题的评论中,您说过

我验证了所有元素都存在。

恕我直言,我只是不明白这是怎么回事。我怀疑这些id值略有不同,或者它们根本没有id值,而是它们有name值。

这是一个完整的工作示例:Live copy | 来源

<!DOCTYPE html>
<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>Test Page</title>
<style>
  body {
    font-family: sans-serif;
  }
</style>
</head>
<body>
  <input id="D1" value="valueOfD1">
  <input id="D2" value="valueOfD2">
  <input id="dgpids" value="valueOfdgpids">
  <br><input id="theButton" type="button" value="Click Me">
  <script>
  function goToPMDisplayer(){
      alert('Got '); 
      var option=document.getElementById("D1").value;
      var vDaeId=document.getElementById("D2").value;
      var dgpId=document.getElementById("dgpids").value;
      var str= option + " "+ vDaeId + " "+ dgpId
      alert(str); 
      var loc = "display.jsp?option="+option + "&vdaeid=" + vDaeId + "&dgpid=" + dgpId
      alert("loc = " + loc);

  }
  document.getElementById("theButton").onclick = goToPMDisplayer;
  </script>
</body>
</html>
于 2012-05-16T14:10:49.413 回答