2011-02-09 16 views
1

しばらくの間働いているこのようなコードがあります。近くのテキストボックスが空でない限り、HTMLフォームを提出するボタン用です。私はこのコードをコードから直接取り出しました。私はフィールドの内容を変更しましたが、何も削除していません。JavaScriptはfalseを返します。フォームの提出を停止しません

(元のコードはすべて1行に表示されますが、わかりやすくするために改行が追加されています)。

Firefoxでは完全に機能するようです。しかし、IEでは、それは私が理解できない方法で失敗します:入力フィールド(aTextInputFormFieldId)が空の場合、警告を出しますが、ユーザーが警告の[OK]ボタンをクリックした後にフォームを送信します。

ページ全体でビューソースを作成してローカルにコピーしたとき、完全に機能しているようです。フォームを提出するか、アラートを出して提出を拒否します。

現時点では(しかし依然として厄介な)理論は、含まれているJavaScriptライブラリの1つが面白いことをしているため、実際のサイトでは失敗した理由を説明しますが、これは理にかなっていますが、ライブラリをつかむことでそれをチェックしますが、私はこれらのライブラリがこれを混乱させるために何をしているのか想像がつきません。それらはjquery、ユーティリティ関数などの通常のユーティリティライブラリです。

ここで何が起こっているのか誰かが理論を持っていますか?

+0

複数のライブラリをお持ちの場合は、1つずつ追加してフォームを混乱させるようにしてください。 –

+1

'document.all' ?!なぜあなたはIE 4のケータリングをしていますか? – Quentin

+0

@Scott:これは私の考えであり、私は今何をしているのですか...しかし、何らかの理由でこれを傍受してアラートを通過させるライブラリがあるのは難しいですが、 。しかし、何か他のことが起こっているかもしれません...(明らかに私は何かが分かりません* ...) – Beska

答えて

3

あなたはそれがそのsubmit() handlerを通じて何かをやっている場合はjQuery、jQueryのフォームを妨害する可能性が言及しました。あなたのフォームにjQuery.submit()がバインドされているかどうかを確認してください。

通常、純粋なjavascriptを実行する場合、falseを返すだけでは不十分です。あなたがあなたを達成したいのかに応じてのInternet Explorerで作業する場合、イベントオブジェクトが関数に渡されるのではなく、window.eventで見つけることができることに注意してpreventDefaultまたはstopPropagation

で見たいと思うかもしれません。

更新 インターネットエクスプローラでは、代わりにevent.returnValue = false;を使用します。あなたの場合、それはwindow.event.returnValue = false; IEを対象とするときでしょう。

幸運

+0

ftrとなりました。私は同じ問題をChromeで持っていました。これは奇妙で汚れているように見えます。なぜなら私はいつもtrue/falseを返すだけだからですが、event.returnValueを設定すると期待どおりに動作します。 bleh。 – viggity

0

Javascriptプロトコルリンクは1行でなければなりません。新しい行はありません。

onclick="javascript:var obj = document.all ? document.all["aTextInputFormFieldId"] :document.getElementById("aTextInputFormFieldId"); if(obj.value.length == 0){alert('It is 0!');  return false;};" 
+0

申し訳ありません...それは...私はサイト上で漠然と読めるように再フォーマットしました。私はその質問を明確にします。 – Beska

+0

これはJavaScriptプロトコルではありません。 onclickの文字列は関数として解析され、javascript:は単にラベルとみなされます。それがリンクのhrefプロパティだった場合、あなたは正しい –

関連する問題