延迟提交,执行操作然后提交

时间:2015-06-24 15:38:36

标签: c# jquery asp.net-mvc html5 umbraco7

我目前正在Umbraco开展一个需要多阶段预订流程的项目。

在此过程中,我有多个模型作为预订流程的每个阶段。这些都是整个父模型的一部分,用于驱动整个过程。

提交第一阶段后,页面上的信息将传递给控制器​​,进行验证和处理。完成此操作后,用户将被定向回页面,并显示该过程的第二阶段。

我知道这可能听起来有点精神,但请相信我这是你在Umbraco中用自定义路由做的方式。

我遇到的问题是我的预订流程位于页面中间,当页面重新加载时,它会滚动到顶部。

我的想法是使用Javascript捕获页面的当前滚动位置并将其传递到表单提交的模型中然而为了做到这一点,我需要在用户单击时触发捕获并将此数据注入到我的表单中提交按钮。

因此有一种方法可以禁用按钮的默认行为:

  e.preventDefault()

执行一些逻辑:

  var top = $('html').offset().top;

然后重新初始化提交按钮的默认行为,以便在执行此逻辑后提交。

  $(this).unbind('submit').submit();

我尝试过以下内容,但它似乎只是提交了表单,好像什么都没发生一样。

    $(document).ready(function(){
        $('#BKG_Next').on("click",function(e){
            e.preventDefault();
            var top = $('html').offset().top;
            alert(top);
            $(this).unbind('submit').submit();
        })
    })

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

经过一番挖掘和进一步探索后,我想出了以下内容:

var sleep = false;
        $('#BKG_Next').on("click",function(e){
            if(!sleep){
                e.preventDefault();
                var top = $(window).scrollTop();
                var $element = $(this);
                $('#position').value(top);
                setTimeout(function(){
                    slept = true;
                    $element.click();
                }, 100);
            }else{
                slept = false;
            }
        })