2009-04-15 14 views
0

多くのテキスト入力フォームを使用すると、WebKit/Safari/Google Chromeは入力エレメントで「Enter」を押したときにフォームを送信します。サブミット入力要素がなくてもonclickハンドラが登録されていない場合でも入力で入力を押したときにWebKitブラウザがフォームを送信するのを防ぐには

は、例えば、このサンプルコードを参照してください

<html> 
    <body> 
     <form method="POST" action="."> 
      <ul> 
       <li><input type="text" name="foo" value="<?=rand()?>"/></li> 
       <li><input type="text" name="bar" value="<?=$_POST['foo']?>"/></li> 
      </ul> 
     </form> 
    </body> 
</html> 

押圧は、2つのテキスト入力要素のいずれかに入力すると、フォームが送信されます。

JavaScriptで非同期HTTPリクエストを使用してフォームを処理しているので、この動作を防ぐ必要があります。 のカスタムハンドラをイベントにのように登録することができます。preventDefaultstopPropagationです。しかし、新しいテキスト入力要素が動的に追加されたときには醜いと思われ、実際には実用的ではありません。

答えて

5

onsubmitイベントをフォームで聞き取り、falseを返します。

+0

くそー、私がいました分が遅すぎる –

4

フォームを送信したくない場合は、<フォーム>要素を含めないでください。自立型のフォームフィールド要素を含めることは有効です。

value="<?=$_POST['foo']?>" 

XSS脆弱性。すべてのテキストからHTMLへの出力をhtmlspecialchars()する必要があります。

+0

+1 XSS通知の場合。 – Christian

+0

このルートを辿る場合、1つの注意点は、一部のブラウザではフォームデータ>自動完了なしを覚えようとしないということです。 – Chris

1

ダニエルA.ホワイトは正しいですが、私は答えで混乱少しを得たので、多分明確に戻り偽イベントでなければならないことを記載すべき:

function goWithSubmit(e) 
{ 
    if (e) e.returnValue=false; 
} 
+0

ありがとう!私はなぜ 'onsubmit =" false falseを返すのか不思議に思っていた ""うまくいきませんでした。 – Sam

関連する問題