2011-03-08 72 views
1

HI全部Javascript返回false not working in ie

我在JSP中有以下幾行。

<s:submit name="submit" onclick="return validateUser();" action="saveUser" theme="simple" value="Save" /> 

java腳本方法validateUser(),驗證用戶並返回true或false。驗證失敗時,不應提交表格。

這是工作在FF但不是在IE8。

即使驗證失敗,IE8仍會提交表單。

+0

IE是否給出錯誤信息? – JohnP 2011-03-08 06:56:22

+1

試試這個onclick =「javascript:void(0); return validateUser();」 – 2011-03-08 06:57:17

+0

不,IE不會給出任何錯誤信息。表單被正確提交。 – ashishjmeshram 2011-03-08 06:57:37

回答

1

首先,可以執行多個操作的單一形式是壞想法,說...

不要使用提交按鈕,而不是:

<button type="button" onclick="javascript:validateUser();">Save user</button> 
<button type="button" onclick="javascript:deleteUser();">Delete user</button> 

現在你只需要擔心默認提交表單(當用戶按下一個字段中輸入)的行爲。

+0

'javascript:'不是必須的 - onclick是默認的javascript - 爲什麼它是一個壞主意?按下提交的名稱/值對傳遞給服務器 - 這是必須測試的地方 – mplungjan 2011-03-08 08:54:53

+0

這對我有效。謝謝 ! – ashishjmeshram 2011-03-08 09:41:23

+0

@mplungjan這是一個糟糕的(設計)想法,因爲表單是單一動作接口,通過javascript向表單添加更多(提交)動作會創建不必要的複雜性和更多的JavaScript依賴關係。 Onclick確實是默認情況下的JavaScript,但這不是一個壞習慣,而且實際上包含了javascript:前綴。主要是因爲髒內聯javascript正在使用和javascript:前綴使檢測維護更容易。另外編寫依賴於按鈕的鍵/值對的代碼(mplungjan的假設)也不是一個明智的想法,同樣,更復雜的是不必要的。 – BGerrissen 2011-03-08 09:50:55

3

永遠不要假設你可以取消提交按鈕,而是在表單上設置一些javascript變量或隱藏字段並使用onsubmit。請聽我的話。擁有的onsubmit看看由不同的設定變量提交按鈕

切勿使用的javascript:(JavaScript的冒號),除非你是在IE中,有一個VBScript作爲頁面上的第一個腳本。在所有其他情況下,javascript是默認的。

切勿使用這種暴行的<a href="javascript:something()"而不是<a href="#" onclick="return something()

最後,在IE中,當你有一個錯誤發生時,默認操作是提交表單。你很可能有其他錯誤完全在其他地方,並有驗證返回錯誤,這被看作是真(0評估爲假,most anything else is true

<script type="text/javascript"> 
var isvalidateNeeded = true; 
function validate(theForm) { 
    if (!isvalidateNeeded) return true; // allow submission 
. // normal validation 
. 
. 
    return true; // allow submission 
} 
</script> 
<form onsubmit="return validate(this)"> 
. 
. 
. 
<input type="submit" name="subaction" value="Test" onclick="isvalidateNeeded=false" /> 
<input type="submit" name="subaction" value="Check" onclick="isvalidateNeeded=false" /> 
<input type="submit" name="subaction" value="Submit" onclick="isvalidateNeeded=true" /> 
</form> 
0

請注意,如果validateUser()或deleteUser()中存在錯誤或錯誤,那麼「return false」不會停止錨點動作,您的瀏覽器將嘗試鏈接到href「subaction」。下面是邏輯:

  1. 用戶點擊錨
  2. 的onClick觸發的ValidateUser()
  3. 有在的ValidateUser誤差(),因此使用Javascript崩潰和停止所有代碼執行。
  4. 返回false從未被觸發,因爲Javascript已停止。
  5. 瀏覽器嘗試去href屬性

如果你是依靠第三方的JavaScript API(我用的是由回收銀行提供的代碼來生成一個彈出式),以及第三方API使得打破更新JavaScript,那麼你會遇到問題。

以下將在正常條件和錯誤條件下停止鏈接。

<a class="button" href="javascript:;" onclick="validateUser();return false;">Validate User</a> 
1

只有你需要改變的是你的validateUser()函數。 IE正在尋找事件的返回值,所以你需要指定這個:

event.returnValue = true; 
return true; 

event.returnValue = false; 
return false;