사용자가 텍스트 상자에 무엇인가를 입력 할 때마다 제출해야하는 AJAX 양식이 있습니다.ASP.NET MVC : 지연이있는 AJAX 제출 양식
다음 코드는 작동 : 나는 양식을 제출에서 1 초 지연이되도록 코드를 업데이트하기 위해 노력했습니다
<% 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 초 간격으로 타이핑을 중단 할 때만 양식이 제출되도록합니다. 이 코드 은 작동하지 않습니다
<% 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" />
<%} %>
사용자가 짧은 시간 동안 입력이 멈출 때까지 제출되는 아약스 양식을 지연하는 방법에 대한 어떤 제안이?
업데이트 : Chrome을 사용하여 스크립트가 catch 된 예외에서 MicrosoftAjax.js의 어딘가에서 멈추는 것을 발견했습니다. 나는 예외가 정확히 무엇인지 찾는 방법을 모른다. 2 초를 기다린다 정확하게
var timerid;
jQuery("#myForm").keyup(submitWithTimeout);
function submitWithTimeout() {
clearTimeout(timerid);
timerid = setTimeout(submitAjaxForm, 2000);
}
function submitAjaxForm() {
$('#myForm').trigger('onsubmit');
}
코드는 "submitWithTimeout"기능 양쪽 라인을 실행하고, 다음과 같이 디버깅 목적
는 I 코드를 재 작성. submitAjaxForm 함수에 도달하고 앞서 언급 한 것처럼 MicrosoftAjax.js 파일의 catch 된 예외에서 중지합니다.
업데이트 2 : 현재 MicrosoftAjax.js의 디버그 버전을 사용하고 있으며 오류의 원인을 발견했습니다. Chrome에서 expression watcher를 사용하여 다음 문제로 범위를 좁힐 수있었습니다. MicrosoftAjax.js가 실행되는 동안 "eventObject"변수가 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)
은 "이벤트"파라미터에 널 값을 갖는다.
무엇 "작동하지 않습니다"않습니다 의미 : 이와 같이
는 코드는 다음이된다? 오류? 취소되지 않았습니까? 다른 것? 아마도 초기화되지 않은 변수에 대해 clearTimeout을 사용하면 안됩니다. –
아니요, 오류가 없습니다. 사실, 나는 아무것도 볼 수 없다. 자바 스크립트 오류 목록이 명확하고 MVC의 액션 메소드에 대한 호출이 없습니다. 어딘가에 자바 스크립트 문제가 있다고 생각하지만 찾을 수 없습니다. ClearTimeout을 어떻게 다룰 생각입니까? 이 코드는 http://stackoverflow.com/questions/2006870/submit-form-with-delay-while-entering-data-into-input-field에서 발췌 한 것입니다. – Remus
@ 루 : 오류가 잡혔습니다. 나는 그것을 보지 못했습니다. 오류가 무엇인지 아직 모르겠지만, 어디서 왔는지 알고 있습니다 ... 자세한 내용은 업데이트를 참조하십시오. ClearTimeout에 문제가없는 것 같습니다. – Remus