2012-05-16 43 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將引發異常。

相關問題