2013-02-12 29 views
2

我想重定向我的頁面到不同的URL,具體取決於用戶從下拉列表中選擇。如果用戶選擇「A」,則url是表單的action屬性中的默認URL,但如果用戶選擇「B」,我想將其重定向到不同的url。使用javascript重定向到一個新的URL

無論我做什麼,即使從下拉列表中選擇「B」,它也總是重定向到默認URL(即oldUrl.do)。

我能做些什麼將它指向newUrl.do?

注:我正在使用Struts 1.2並在IE8上測試它。

我的jsp頁面:

<form name="myForm" method="post" action="oldUrl.do" id="myForm"> 

    <select name="modeOfT" id="choice"><option value="A">A</option> 
     <option value="A">A</option> 
     <option value="B">B</option> 
    </select> 

    <input type="submit" name="submitBtn" onclick="submitForm()"> 
</form> 

JavaScript函數:

function submitForm(){ 
    var form = document.getElementById("myForm"); 
    var mode = document.getElementById("choice"); 
    if(mode.value == "B"){ 
     $(form).attr("action", "newUrl.do"); 
    } 
} 

以下是其他的東西我都試過,他們仍然帶我去 「oldUrl.do」:

  1. docu ment.location.href( 「newUrl.do」);

  2. window.location.href =「newUrl.do」;

  3. top.location.href =「newUrl.do」;

  4. parent.location.href =「newUrl.do」;

  5. window.location.replace(「newUrl.do」);

  6. window.location =「newUrl.do」;

+3

你試過了window.location = 「你的URL」; – 2013-02-12 17:42:08

+0

是的,我有。謝謝。我會將其添加到我的列表中。 – Susie 2013-02-12 17:43:09

+1

你的代碼似乎工作正常http://jsfiddle.net/xv3Uf/5/(我仍然建議使用提交處理程序在我的答案) – 2013-02-12 18:11:52

回答

3

,你可以:

  1. 在服務器發送一個HTTP /這取決於用戶選擇重定向頭在形式中。

  2. 如果要在瀏覽器中處理重定向,請使用「onsubmit」屬性,並返回false值。您可以使用window.location = <URL>;

    <form onsubmit="return myJSFunc()" .. > 
        ... 
        <input type="submit"> 
    </form> 
    
+0

這工作。我使用了window.location ='newUrl.do';然後返回false;重要的是關鍵。你能告訴我爲什麼這有效嗎?我嘗試了@Juan的建議,它適用於FF,但不適用於IE。 – Susie 2013-02-12 22:45:25

+0

@javaStudent因爲它可以防止在這種情況下提交表單的默認操作。 – SuperSaiyan 2013-02-12 22:53:15

+0

@javaStudent如果你的問題解決了,請「接受」解決你的問題的答案。 – SuperSaiyan 2013-02-12 23:06:36

3

<submit>變成正常的<button>

在submitForm()函數,在年底,致電:

document.forms["myForm"].submit(); 
+1

或'form.submit()' – 2013-02-12 17:44:13

+0

使它成爲按鈕有什麼區別?沒有'type =「按鈕」'的按鈕的行爲與提交按鈕 – 2013-02-12 17:57:06

+0

的行爲完全相同,因此調用'form.submit()'是一種解決方法,不理解正在發生的事情。當您單擊按鈕時,表單已經處於提交過程中。這段代碼的意圖是撤銷提交按鈕給你並自己實現的東西。 'onsubmit'處理程序是*正確*的地方,只需修改表單的'action'即可完成 – 2013-02-12 17:59:00

4

你不應該處理click事件處理函數中這個重定向。爲了應對提交你應該使用提交事件,這和許多其他原因(人們可以使用進入,他們可以打空間,同時注重在提交按鈕)

動作示例的形式http://jsfiddle.net/xv3Uf/2/

HTML

<form name="myForm" method="post" action="oldUrl.do" id="myForm" onsubmit="return submitForm()" > 

JS

function submitForm(){ 
    var form = document.getElementById("myForm"); 
    var mode = document.getElementById("choice"); 
    if(mode.value == "B"){ 
     form.action = "newUrl.do"; 
    } 
} 

由於您已經在使用jQuery,爲什麼不喝酒,並停止在HTML中設置JS處理程序的啓蒙前練習? http://jsfiddle.net/xv3Uf/3/

<form name="myForm" method="post" action="oldUrl.do" id="myForm"> 

JS

$('#myForm').submit(function(e){ 
    if ($('#choice').val() === 'B') { 
     this.action = 'newUrl.do' 
    } 
}); 
+0

謝謝你的回答。我嘗試了你的第一種方法,它似乎在FF中工作,但在IE8中給我下面的錯誤,當我調試它「錯誤消息:對象不支持此屬性或方法,行:804」。在804行是stmt:form.action =「newUrl.do」; – Susie 2013-02-12 19:03:15

+0

@javaStudent看看這個http://stackoverflow.com/questions/266794/javascript-form-submit-object-doesnt-support-this-property-or-method-ie7這是說類似的問題可以來自IE自動從ID中創建全局變量的事實。另外,當你不顯示你所嘗試的實際代碼是什麼時,很難提供幫助。我還建議你從表格中刪除名字(在我鏈接的答案中建議)。 – 2013-02-12 19:09:42

+0

@javaStudent你也可以嘗試'form.setAttribute('action','newUrl.do')'http://stackoverflow.com/questions/12243428/javascript-form-field-submit-object-doesnt-support-this -property-or-method-in – 2013-02-12 20:17:39

相關問題