2012-05-16 66 views
2

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

 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 

     } 
+1

有没有“;”s? – Sebas

+1

@Sebas - Javascript中没有问题。 – Oded

+2

如果'alert(str)'不起作用,那意味着你的'var'线之一出错了。我的猜测是那些不存在的元素之一。 –

回答

3

Moreover, the alert function that prints the content of option, vDaeId, dgpId does not executed (I dont see a pop up in the browser).

这告诉我们,代码是通过抛出一个异常失败。我的猜测是,你至少没有一个你所依靠的元素(D1D2dgpids)。因此document.getElementById返回null,并且当您尝试访问.value时,您会得到一个异常。这些字符串你getElementById使用

注意必须id值,而不是name秒。所以你必须在一个元素上有id="D1",在另一个元素上有id="D2",在另一个元素上有id="dgpids"。另请注意,id值可区分大小写,并且它们必须在页面上是唯一的。 (如果你弄错了最后一条规则,大多数浏览器会按照文档顺序给你第一个,但是...)

我假设你不打电话goToPMDisplayer,直到页面完全加载,但如果你在页面加载期间调用它,确保直到元素存在之后才调用它(例如,在文档中将元素的调用放在元素的下方)。


对于这样的问题,alert风格的调试几年前就出去了。在2012年,我们使用适当的调试器。现在有一种内置于所有主流浏览器的产品,甚至IE。你可以设置断点,遍历代码,检查DOM的当前状态......总之,不需要在黑暗中摸索;你可以照亮发生的事情。


在关于这个问题的评论,你说

I verified that all ements exist.

恕我直言,我只是不明白怎么说都可以。我怀疑id值略有不同,或者他们根本没有id值,但他们有name值。

下面是一个完整的工作示例:Live copy | source

<!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> 
+1

+1,'even IE'。 –

+0

是的你有没有名称标签,但没有id标签。我也放置了id标签,但问题仍然存在。有没有我失踪?非常感谢答案。 –

+0

@Fardaarda:如果您添加了'id'值,但仍然看到问题,那么您必须发布代码(**仅** **自包含测试用例的最低需求,例如我的以上)。 –

5

你说的第一个警报作品,第二个没有,这意味着这些线路中的一个具有JavaScript错误:

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

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

相关问题