2013-06-24 2 views
1

작동하지 페이드 아웃. 사라지고 새로운 콘텐츠가 사라집니다. 간단한 경고로 테스트 한 후 이후에 "OnBegin"이 발생하지 않는 것으로 보입니다. 이전 내용이 제거되어 설명서와 모순됩니다. "페이지가 나타나기 직전에 호출 할 javascript 함수의 이름을 가져 오거나 설정합니다. 업데이트되었습니다. "Ajax.BeginForm 내가 가진

왜 이런 일이 발생하는지 알고 싶습니다.

답변

4

좋아, 문제는 페이드 아웃을 호출 할 때 너무 늦었습니다. 양식 제출이 이미 발생했으며 div가 이미 삭제되었음을 의미합니다 (replace 메소드의 특성으로 인해). 이 사건들이 매우 빨리 발포한다는 것을 명심하십시오. 당신이해야 할 일은 폼이 제출되기 전에 페이드 아웃이 발생하도록 강제하는 것입니다. 이것에 대한 다양한 해결책이 있습니다. (e.preventDefault를 사용하는 것을 포함하여 스택 오버플로가 많이있는 많은 것들이 있습니다.)하지만 실제 제출 버튼을 숨기고, 가짜 태그를 추가하고 페이드 아웃을 사용하여 지연된 양식을 트리거하는 것을 선호합니다. setTimeout. 교체 된 div가 사라지면 고정 된 화면 높이를 유지하기 위해 외부 div도 추가했습니다.

@using (Ajax.BeginForm("actionToDo", new AjaxOptions 
{ 
    HttpMethod = "post", 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "updatediv", 
    OnComplete = "$('#updatediv').hide().fadeIn()" 
})) 
{ 
    <div style="height:20px;"> 
    <div id='updatediv'> 
     text to replace</div> 
    </div> 
    <input id='realsubmit' style='display:none;' type="submit" /> 
    <input id='fakesubmit' type="button" value="submit" onclick ="$('#updatediv').fadeOut('slow'); setTimeout(function() { $('#realsubmit').click(); }, 1000);" /> 
}