2009-05-18 9 views
4

ASP.NET WebフォームとASP 3(従来のASP)では、フォーム提出ボタンの名前を「submit」と命名すると「ものが壊れる」という問題が発生しました。以下はレンダリングされたHTMLです。HTMLフォームの送信ボタンの名前を付けて「送信」すると、何かが中断するのはなぜですか?

私は、なぜ、何が起こったのか正確にはわからないので、「ブレーク」と言います。しかし、通常、サブミットボタンを押しても何もしなかったという症状が現れました。しかし時にはうまくいった。

は実際に、私はちょうど下記のコードで迅速な1ページのテストを構築し、提出がうまく働いた:

<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="txtTest" runat="server" /> 
    <asp:Button ID="Submit" runat="server" Text="Submit" /> 
</div> 
</form> 

しかしを、過去に、この問題が発生して、ボタンの名前を変更しました常に症状を消してしまった。

HTML/HTTP/Browserのエキスパートが、送信ボタンでid = "submit"を設定すると問題が発生する理由を知っていますか?このSO commentは "提出" を提案しているようだ

EDIT

は予約キーワードです。しかし、なぜ "id"または "name"属性にはこれには何の意味がありますか?そして、この "予約された"キーワードは、競合の原因となるような方法でどのように実装されますか?

おかげで再び

答えて

15

要素formは、submitという名前のメソッドを持ちますが、フォームの要素もメンバーです。

submitという名前のボタンがある場合は、document.form1.submitを使用してアクセスできます。しかし、それはsubmitメソッドと同じ名前であるため、もはやそのメソッドにアクセスする方法はありません。メソッドを使用してフォームを送信すると、それはもはや機能しません。あなたはJavascriptを使用してフォームを送信するボタンを使用している場合

例えば、それは動作しません:

<input type="button" name="submit" onclick="this.form.submit();" value="try" /> 

をボタンがsubmitメソッドを使用しようとすると、それは代わりに自分自身への参照を取得します(ボタンが関数ではないため、呼び出ししようとするとエラーメッセージが表示されます)。

+0

うーん...興味深いです。乾杯! – andy

+0

うわー! DOMとフォームコントロールのために宣言された名前との間には、あらゆる形の名前空間の衝突が存在するようです。 –

+0

名前空間の衝突は、JavaScriptが最も頻繁に批判されている1つのことです。偶発的(または意図的)なオーバーロードから保護されるものは事実上ありません。その理由は、あなた自身のクロージャーですべてをラップするか、またはあなたのトップレベルのすべてのオブジェクトを斬新なものと呼ぶなど、さまざまなスキームを使用して衝突から保護することです。 –

0

コードビハインドそれはあなたが指定した値に基づいて命名されたオブジェクトにイベントをバインドすることができますが生成されます。

2

javascriptのDOMの予約語をすべて忘れてしまいます。あなたが定義したすべてのものの前に "my"を使用するか、または予期せずオーバーロードして混乱を招く可能性のある予約語と明確に矛盾しないものを使用します。

+0

しかし、サーバー側にひどい名前が入ってきますね。 DOM名は大文字と小文字を区別しますか?最初の文字を大文字にするだけで衝突を避けることができますか? –

+0

私はあなたが "ひどい名前"とみなすものと信じていることによると思います。 HTMLは大文字と小文字を区別しないので、たとえ正式であったとしても、ブラウザはこの種の間違いをほぼ許してしまうでしょう。いずれにしても、あなたの名前があなたのものであることを確認するための多くの不合理な方法がありますが、あなたはあなたの審美的な判断で少し柔軟でなければなりません。 :) –

+0

HTMLは大文字小文字を区別しませんが、JavaScriptはDOMのJSオブジェクトではありませんか? –

0

ただのonSubmit使用している場合は、フォームの送信でproble

<form id="form1" runat="server" onsubmit="this.submit()"> 
<div> 
    <asp:TextBox ID="txtTest" runat="server" /> 
    <asp:Button ID="Submit" runat="server" Text="Submit" Type="submit"/> 
</div> 
</form> 
関連する問題