2009-06-12 16 views
3

私はこの奇妙な問題を抱えていますが、ASP.NETやIE 7が責任を負うかどうかはわかりません...ボタンを送信するには2つのテキストボックスが必要ですか?

私は1つのテキストボックスと1つのフォーム上で、テキストボックス内でEnterキーを押すと、textboxの値がPOSTされます。ボタンは送信されず、Click even server-sideがトリガーされません。

私は2つのテキストボックスを持っている場合、それらのいずれかでEnterキーを押すと、ボタンを送信し、Clickイベントをトリガーします。

WTF?


を追加しました:は、IE関連の問題であるように思われます。簡単な例を示します。アドレスバーに注意し、最初のテキストボックスに入ったらEnterキーを押し、最後の2つのテキストボックスのあるときにEnterキーを押します。

<html> 
    <body> 
     <form method="GET" action="" style="display: block"> 
      <input type="text" id="ctl1" name="ctl1" value=""> 
      <input type="submit" id="ctl2" name="ctl2" value="Klik"> 
     </form> 
     <form method="GET" action="" style="display: block"> 
      <input type="text" id="ctl1" name="ctl1" value=""> 
      <input type="text" id="ctl3" name="ctl3" value=""> 
      <input type="submit" id="ctl2" name="ctl2" value="Klik"> 
     </form> 
    </body> 
</html> 
+0

ブラウザに送信されているマークアップとHTMLを入力してください。 –

+1

あなたは実際にENTERビヘイビアに頼るべきです - これはHTML仕様では定義されていません。すべてのブラウザが独自の方法でビヘイビアを "追加"しています。 (IE、FireFox、Opera)各ボタン(もしあれば)が論理的なものであるという独自の考え方を持っていますボタンをクリックして送信します。 – David

答えて

0

あなたはASP.NETを使用している場合は、あなただけの単一のフォームを持っている必要があります。サーバー側(フォーム自体を含む)にアクセスするコントロールには、runat = "server"属性も必要です。

いいえ、ASP.NETはありません。あなたのフォームのメソッドとしてGETを持っているので、何も投稿していないのですか?

+0

ASP.NET部分をスクラップします。これはIE関連です。この例には簡単のために2つの形式があります。 –

+0

これは一例です!!!!!問題の問題だけを示す現実のコードの蒸留版です!実際のコードの近くでさえないので、それについては何も仮定しないでください! はい、GETメソッドは、送信されたものを見るのは簡単です(アドレスバーを見てください)。実生活アプリケーションにはPOSTがあります。 –

0

htmlフォームのデフォルト動作では、コントロールにフォーカスがある場合はフォームを送信します。あなたがしなければならないことは、ENTERキーのトラップであり、フォームの送信をあなたが望むように処理することです。

(このスクリプトの多くの源がある)の前に、私はこのような何かを行っている:

<script language="javascript"> 
function returnkey(evt) { 
    var evt = (evt) ? evt : ((event) ? event : null); 
    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
    if ((evt.keyCode == 13) && (node.type!="textarea")) {return false;} } 

document.onkeypress = returnkey; 
</script> 
0

あなたがasp.netを使用している場合、私はこの問題を修正するために使用されてきた1つのオプションを設定することですボタンをrunat = "server"に設定し、コントロールをパネルにラップし、パネルのdefaultbuttonプロパティをボタンのIDに設定します。

+0

例のコードのように彼がIDを繰り返している場合、それはあなたの提案には問題にならないでしょうか? –

+0

これは、例のコードでは間違いでした。私はすでにそれを修正しました。 –

2

私があなたの場合は、ボタンのクリックハンドラについて心配する必要はなく(結局はクリックされなかった)、ボタンの値もフォームを無視するように書いていますが送信されます(ボタンに送信された値がある理由はわかりません)。

あなたの質問へのコメントとして、ENTERボタンの動作はよく標準化されておらず、さまざまなブラウザで異なる動作をする可能性があるため、ページが正常に動作しているとは思えますが、また、フォームを提出することができる他の方法があります:

  • は、堅牢性のために、キー
  • )(ボタン
  • のJavaScript form.submitを提出
  • <input type="image">

を入力しますが、私が使用したいですフォームのonsubmitイベントハンドラは、フォームが送信されたときに発生する必要のあることを実行し、onclickハンドラを使用して、特定のボタンがクリックされたときに発生する必要があるものを処理します。ボタンの値は、<input type="hidden">を使用して、複数のボタンのシナリオで必要な隠し値を格納し、ボタンの値を気にする必要はありません。

それらのオプションが使用可能でない場合は、あなたが隠し入力フィールドを追加することができます。

<input type="text" id="h1" name="h1" value="ignore" style="display: none"> 

これはあなたのサンプルコードでIE8に私のための問題を解決するように見えました。

関連する問題