かなり大きな入力フォーム (数百のフィールド、在庫アプリケーション) に document.form.submit() 関数を使用しています。ユーザーが一定時間アイドル状態になった後にこれを呼び出しています。ユーザーが入力したデータを保存したいと思います。これを試すと、ページがリロードされます (アクションは #) が、フィールドに入力された新しいテキストは REQUEST に渡されないため、DB に入れることができません。これが発生する根本的な理由はありますか、それとも私のコードが一緒にうまく動作しないのですか (アイドル時間を追跡するためのフォームとライブラリを表示するために EXTJS グリッド ビューを使用しています)? ありがとう、ロバート
4 に答える
私はここに答えを入れたと思います。私が見つけたのは、これを行うことでした: setTimeout('frm.submit();', 2000); ページをリロードしましたが、フォームを送信しませんでした。私がこれをしたとき: frm.submit(); フォームが送信され、データが渡されました。最初の方法がうまくいかなかった理由はわかりませんが、それを知る必要はありません:)
サーバーが入力値を無効にしている可能性があります。サーバー上のページが次のようになっているとします。
<form action="/page.cgi">
...
<input name="Fieldx" value=""/>
</form>
フィールドを無効にすると思います。または、これはサーバーアクションが間接的に設定している可能性があります。JSFでは、このようなものです。
<input name="Fieldx" value="#{bean.nullProperty}"/>
サーバーには何があり、ブラウザは何ですか?
入力フィールドが含まれているかどうかを確認するために、HTML 投稿要求をキャッチしようとします。そうであれば、サーバーに問題があります。
ただ、おっしゃる通り、ブラウザの JavaScript DOM の扱い方に矛盾があるからだと思います。これは、フォームの送信ボタンを省略しても機能する場合に当てはまります。
オブジェクトのsubmit
メソッドはHTMLFormElement
、ユーザーが送信ボタンをクリックしたかのように、フォームを送信するだけです。そのためaction
、フォームの属性が に設定されている#
場合、フォーム データが同じページに送信されるため、ページが更新されたように見えます。
ただし、アクション属性を別のページに設定しても、それが行われるのは奇妙です。
フォームのmethod
属性は または に設定されていますget
かpost
?