微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用回调恢复默认行为

如何解决使用回调恢复默认行为

在提交表单之前,需要使用Javascript进行几项检查。这些检查将验证在继续操作之前是否已针对该特定部分捕获了所有适用的数据(如果将按钮选择为“是”并且没有提交任何索赔,以及客户是否提交了重复的索赔)。

对重复声明进行检查的部分返回了从Ajax函数返回的数据数组。如果有任何有关此的数据,则必须防止继续处理该表格,并显示一个弹出窗口-这正在起作用。我遇到的问题是,当没有数据(计数= 0)时,我需要触发一个按钮,并且表单必须继续执行(调用MVC的Post方法)。但是,该表单不会继续执行Post事件(以认行为恢复)。

这就是我所做的:

    $("#btnNext").on("click",function (e) {
    isNextClick = true;
    if ($("input[name='Claims']:checked").val() === "Yes" && claimCount === 0 && !isClaimFilled()) {
        $('#btnAddClaim').trigger("click");
        return false;
    } else if ($("input[name='Claims']:checked").val() === "Yes" && isClaimFilled()) {
        $("#dialog-claim-error").modal("show");
        return false;
    } else {
        //Lets first check for duplicates
        e.preventDefault();

        var result = clientClaimDuplicationCheck(function (isContinue) {
            var claimCount = isContinue.length;

            if (claimCount === undefined || claimCount.length == 0) {
                // array empty or does not exist when callback is done. 0 will be passed to resume default behavIoUr
                claimCount = isContinue;
            }

            if (claimCount != undefined || claimCount != null) {
                if (claimCount > 0) {

                    $.each(isContinue,function (index,item) {
                        addClaimDuplicateList(claimIndex,item.Desc,item.Year,item.Month);
                    });
                    e.preventDefault();
                    $("#claimDuplicateList").show();
                    $("#dialog-nav-driver-duplicateClaims").modal("show");
                }
                else {
                    // Prevent infinite loop
                    $(this).unbind("click");
                    
                    //Now submit form,all validation passed - resume default behavior
                    //  $("#btnNextValidated").submit();
                    $('#btnNextValidated').trigger("click");
                }
            }
        });
    }
});

$("#btnNextValidated").on("click",function (e) {
    $('#ClaimYear').removeClass("input-validation-error");
    var span = $("div").find("[data-valmsg-for='ClaimYear']");
    span.removeClass("field-validation-error").text("");

    setTimeout(ss.isValidPage,100);
    return true;
});

function clientClaimDuplicationCheck(callback) {
   // var isContinue;
    //post data to the server
    $.ajax({
        url: "/Service/ClientClaimDuplicationCheck",type: 'POST',contentType: "application/json; charset=utf-8",dataType: "json",success: function (data) {
            callback(data);
        },error: function (a,b,c) {
            var error = a;
        }
    });
 }

     function addClaimDuplicateList(id,name,year,month) {
    $('#showClaimDuplicateList').append('<div id="claimDuplicateItem' + id + '" data-claim-key="0" class="control-label label-heading-3 label-input-claimsubTitle">' +
        '<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><ul class="claimUl"><li>' + name + ' ' + month + '/' + year + '</li></ul></div>' +
        '</div>');
}

恢复行为时需要调用方法

    [HttpPost]
    public ActionResult Driverinformation(Driverinformationviewmodel model)
    { //some methods}

是否可以恢复认行为并调用按钮的Post方法

解决方法

在以下代码行中,您再次触发了一次单击按钮,以便将表单实际提交到后端。

//Now submit form,all validation passed - resume default behavior
//  $("#btnNextValidated").submit();
$('#btnNextValidated').trigger("click");

您应该知道,表单提交按钮始终位于表单内部,并且按钮单击事件最终会触发表单提交事件,然后将表单数据发布到表单URL。

基本上,在验证完成后,您不必再次在按钮上触发click事件,而只需在表单本身上触发Submit事件。

$("#formId").submit();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。