【问题标题】:Delay submit, perform action and then submit延迟提交,执行操作然后提交
【发布时间】:2015-06-24 15:38:35
【问题描述】:

我目前正在 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();
        })
    })

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    经过一些挖掘和进一步探索,我得出以下结论:

    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;
                }
            })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 2015-08-16
      相关资源
      最近更新 更多