1

我有:

@using (Ajax.BeginForm("actionToDo", new AjaxOptions 
{
    HttpMethod = "post",
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "updatediv",
    OnBegin = "$('#updatediv').fadeOut()", 
    OnComplete = "$('#updatediv').hide().fadeIn()"
}))
{
    <div id='updatediv'>
    </div>
}

淡入可以正常工作,但问题是当我提交 Ajax 请求时它不会淡出。它只是消失,然后淡入新内容。在使用简单警报进行测试后,似乎“OnBegin”直到旧内容被删除后才会发生这与文档相矛盾:“获取或设置要在页面更新之前立即调用的 javascript 函数的名称。 "

知道为什么会这样吗?

4

1 回答 1

4

好的,问题是当你调用淡出时,为时已晚。表单提交已经发生,这意味着 div 已经消失(由于 replace 方法的性质)。请记住,这些事件的触发速度非常快。您需要做的是在提交表单之前强制淡出。有多种解决方案(许多已经在堆栈溢出,包括使用 e.preventDefault),但我更喜欢隐藏真正的提交按钮,添加一个假按钮并使用它来淡出,然后使用触发延迟表单提交一个设置超时。当替换的 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);" />
}
于 2013-07-05T03:38:32.930 回答