2011-03-08 6 views
1

HIすべてJavaScriptの戻り値がfalseになっています。

私のJSPに次の行があります。

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

javaスクリプトのメソッドvalidateUser()は、ユーザーを検証し、trueまたはfalseを返します。検証が失敗した場合は、フォームを提出しないでください。

これはFFで動作していますが、IE8では動作しません。

IE8は、検証が失敗した後でもフォームを送信します。

+0

このエラーメッセージは役に立ちましたか? – JohnP

+1

これを試してくださいonclick = "javascript:void(0); return validateUser();" –

+0

いいえ、IEはエラーメッセージを出すものではありません。フォームは適切に提出されます。 – ashishjmeshram

答えて

1

まず、複数のアクションを実行することができ、単一のフォームが悪いです言っアイデア、...

ではなく、送信ボタンを使用しないでください。

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

は今、あなただけのフォーム(ユーザープレスがフィールドに入力したとき)の動作を提出し、デフォルトを心配する必要があります。

+0

'javascript:'は必要ありません - onclickはデフォルトのjavascriptです - なぜそれは悪い考えですか?押されたサブミットの名前/値のペアがサーバーに渡されます。つまり、テストする必要があります。 – mplungjan

+0

これは私のために機能しました。ありがとう! – ashishjmeshram

+0

@mplungjanフォームはシングルアクションのインターフェイスなので、フォームは単なるアクションのインターフェイスなので、フォームにはより多くのアクションを提出することができます(javascriptを使用すると複雑さが増し、JavaScriptの依存関係が増えます)。 Onclickは実際にデフォルトごとにjavascriptですが、javascript:プレフィックスを含めることは悪い習慣ではありません。主に汚れたインラインのjavascriptが使用されており、javascript:接頭辞がメンテナンスを検出しやすくなります。また、ボタンのキー/値のペア(mplungjanの前提)に依存するコードを書くことは、やはり不必要な複雑さをもたらす明るいアイデアではありません。 – BGerrissen

3

送信ボタンをキャンセルする代わりに、フォームにjavascript変数またはhiddenフィールドを設定し、onsubmitを使用することはできません。それを私の言葉で伝えてください。あなたがIEであり、ページ上の最初のスクリプトとしてVBScriptを持っていない限り(ジャバスクリプトコロン):別のボタンを提出

によって設定された変数でのonSubmit外観はJavaScriptを使用したことがありません。それ以外の場合はjavascriptがデフォルトです。

代わりにIEで<a href="#" onclick="return something()

最後に、あなたがエラーの発生を持っている場合、デフォルトのアクションがフォームを送信するためにあるの<a href="javascript:something()"などの残虐行為は絶対に使用しないでください。あなたは非常によく、完全に別の場所で他のエラーを持っていると真として見られている、検証がエラーを返すがあり(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「サブアクション」にリンクしようとします。ここでは、ロジックは次のとおりです。

  1. ユーザーのonClick()は
  2. はのvalidateUserにエラーがあります()ので、JavascriptのクラッシュのvalidateUserを発射し、すべてのコードの実行を停止し
  3. アンカー
  4. をクリックします。
  5. Javascriptが既に停止しているため、falseが返されることはありません。
  6. ブラウザは、あなたが(私はポップアップを起動するためにRecyclebankによって提供されたコードを使用していた)サードパーティのJavaScript APIに依存している、とサードパーティのAPIが壊れるの更新を行った場合、href属性

に行くことにしよう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; 
関連する問題