ユーザーがテキストボックスに何かを入力するたびに提出する必要があるAJAXフォームがあります。ASP.NET MVC:遅延付きAJAX送信フォーム
次のコードは動作します:
<% using (Ajax.BeginForm("myAction", "myController", null, new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "resultDiv" }, new { id = "myForm" }))
{%>
<script type="text/javascript" language="javascript">
jQuery("#myForm").keyup(function() { $('#myForm').trigger('onsubmit'); });
</script>
Search: <input type="text" id="myTextField" />
<%} %>
私は、フォームを送信中に1秒の遅延があるように、コードを更新しようとしてきました。この遅延は、ユーザーが1秒間の入力を中止したときにのみフォームが送信されるようにします。このコードはを動作しません:
<% using (Ajax.BeginForm("myAction", "myController", null, new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "resultDiv" }, new { id = "myForm" }))
{%>
<script type="text/javascript" language="javascript">
var timerid;
jQuery("#myForm").keyup(function() {
clearTimeout(timerid);
timerid = setTimeout(function() { $('#myForm').trigger('onsubmit'); }, 1000);
});
</script>
Search: <input type="text" id="myTextField" />
<%} %>
ユーザーが短時間の入力を停止するまでに提出されてからAjaxフォームを遅らせる方法上の任意の提案は?
更新日: Chromeを使用すると、スクリプトがMicrosoftAjax.jsのどこかで捕捉された例外で停止することがわかりました。私は例外が何であるかを正確に見つける方法を知らない。デバッグ目的のため
次のように、私は、コードを書き直し:
var timerid;
jQuery("#myForm").keyup(submitWithTimeout);
function submitWithTimeout() {
clearTimeout(timerid);
timerid = setTimeout(submitAjaxForm, 2000);
}
function submitAjaxForm() {
$('#myForm').trigger('onsubmit');
}
コードが「submitWithTimeout」関数の両方のラインを実行し、正確に2秒待ちます。 submitAjaxForm関数に到達し、前述のように、MicrosoftAjax.jsファイルの捕捉された例外で停止します。
更新2:私は現在、MicrosoftAjax.jsのデバッグバージョンを使用しており、エラーの原因を発見しました。 Chromeで式ウォッチャーを使用すると、次の問題に絞り込むことができました。「eventObject」変数は、MicrosoftAjax.jsが実行されている間はnullです。私がソースコードから集めるのは、タイマーを使ってフォームを送信するときに、onsubmitコードの「イベント」がnullであるということです。なぜどんなアイデア?タイムアウト法を用いる場合
<form action="myAction" id="myForm" method="post" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'myResult' });">
new Sys.UI.DomEvent(event)
は、「イベント」パラメータにNULL値を有します。
何を意味するかを「動作しない」のでしょうか?エラー?キャンセルされていませんか?何か?おそらく、それ以外の初期化されていない変数に対してclearTimeoutを実行してはいけません。 –
いいえ、エラーはありません。実際には、私は見ることができません。 JavaScriptエラーのリストはクリアされていますが、MVCのアクションメソッドにコールが到達しません。私はどこかにjavascriptの問題があると思っていますが、私はそれを見つけることができません。どのようにClearTimeoutを扱うか考えていますか?コードは、http://stackoverflow.com/questions/2006870/submit-form-with-delay-while-entering-data-into-input-fieldのアダプテーションです。 – Remus
@ルー:エラーがキャッチされたので、私はそれを見ませんでしたが、私はまだエラーが何であるか分かりません。 ClearTimeoutに問題はないようです。 – Remus