0

我似乎找不到任何与我正在尝试做的完全一样的例子,即使它看起来像是最常见的例子。我在后端使用 JSP 并在每次单击选项卡时访问数据库进行验证。我有 5 个选项卡,每个选项卡都有一个表单,因为这是用于编辑这些表单中的信息,所以文本字段已经填写。我需要做的是验证这些字段中的信息是否已被编辑 - 我有已经 - 每当单击选项卡时,但如果信息不正确,则用户无法继续前进。现在棘手的部分是,用户可以单击 5 个选项卡中的任何一个,并且用户在导航选项卡时必须遵循特定的顺序。这就是我遇到问题的地方。这是我的代码:

$(function() {
    $("#tabs").tabs({
    select: function(event, ui) {
    var $emptabs = $('#tabs').tabs();
    var selected = $emptabs.tabs('option', 'selected');
    //$('#tabs-' + selected).on('focusout', function() {
    //tabChange();
    alert('validating tab ' + ui.index);
    }
    });
    var firstName = $("#firstname").val();
    var middleInitial = $("#middleinitial").val();
    var lastName = $("#lastname").val();
    var suffix = $("#suffix").val();
    var gender = $("#gender").val();
    var dob = $("#dob").val();
    var ssn1 = $("#ssn1").val();
    var ssn2 = $("#ssn2").val();
    var ssn3 = $("#ssn3").val();
    var password1 = $("#password1").val();
    var password2 = $("#password2").val();
    var mrtlStsCd = $("#mrtlstscd").val();
    var strAddr1 = $("#straddr1").val();
    var strAddr2 = $("#straddr2").val();
    var city = $("#city").val();
    var state = $("#state").val();
    var zipCode = $("#zipcode").val();
    var zipPls4= $("#zippls4").val();
    var country = $("#country").val();
    var hmPhone = $("#hmphone").val();
    var cellPhone = $("#cellphone").val();

    $.ajax({
        async : "false",
        type: "POST", 
        url: "http://localhost/test/ActionServlet",
        data: { firstname: firstName, middleinitial: middleInitial, lastname: lastName, suffix: suffix, empgender: gender, dob: dob, ssn1: ssn1, ssn2: ssn2, 
                ssn3: ssn3, password1: password1, password2: password2, mrtlstscd: mrtlStsCd, straddr1: strAddr1, straddr2: strAddr2, city: city, state: state, zipcode: zipCode, zippls4: zipPls4, 
                country: country, hmphone: hmPhone, cellphone: cellPhone, step:1 },
        success: function(data) {
            var xmlDoc = null;

            if (window.DOMParser)
            {
               parser = new DOMParser();
               xmlDoc = parser.parseFromString(data,"text/xml");
            }
            else // Internet Explorer
            {
               xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
               xmlDoc.async = false;
               xmlDoc.loadXML(data); 
            }

            var status = xmlDoc.getElementsByTagName("status")[0].childNodes[0].nodeValue;

            if (status == "ok")
            {
                var nextPageID = xmlDoc.getElementsByTagName("nextpageid")[0].childNodes[0].nodeValue;
                 alert('valid');
                $('#personalmessage').hide();
                $emptabs.tabs('select', selected+1);
            }
            else if (status == "errors")
            {
                alert('not valid');
                var errorElements = xmlDoc.getElementsByTagName("error");
                var errors = "";

                for (var x= 0; x < errorElements.length; x++) 
                {
                    errors += errorElements[x].childNodes[0].nodeValue + "<br>";
                }

                $('#personalmessage').show();
                $("h2").html(errors);   
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            $('#personalmessage').show();
            $("h2").html(errorThrown);  
        }
    });
});
4

1 回答 1

0

好吧,由于没有人回答我的问题,我在这里得到了一位开发人员的帮助。我想这里没有人知道答案,或者只是不想回答。无论如何,我会很乐意分享我的解决方案。在父页面上,选项卡脚本如下所示:

var $prevseltab = 0;
var $tabfuncs = {};
var $preventDefault;
var $bindTabs;
$(function() {
    $("#tabs").tabs();

    $preventDefault = function(e){
        e.preventDefault();
    }

    $bindTabs = function(){
        $("#tabs").bind("tabsselect", function(e, tab) {
            $tabfuncs[$prevseltab](e,tab.index);
            return false;
        });
    };

    $bindTabs();    
});

在子页面上,它看起来像这样:

$tabfuncs[0] = function(e,currtab) {

    var firstName = $("#firstname").val();
    var middleInitial = $("#middleinitial").val();

    $.ajax({
        async : "false",
        type: "POST", 
        url: "http://localhost/test/ActionServlet",
        data: { firstname: firstName, middleinitial: middleInitial, step:1 },
        success: function(data) {
            var xmlDoc = null;

            if (window.DOMParser)
            {
               parser = new DOMParser();
               xmlDoc = parser.parseFromString(data,"text/xml");
            }
            else // Internet Explorer
            {
               xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
               xmlDoc.async = false;
               xmlDoc.loadXML(data); 
            }

            var status = xmlDoc.getElementsByTagName("status")[0].childNodes[0].nodeValue;

            if (status == "ok")
            {
                 $('#personalmessage').hide();

                 var $emptabs = $('#tabs').tabs();
                 $emptabs.unbind("tabsselect");
                 $prevseltab = currtab;
                 $emptabs.tabs('select', currtab);
                 $bindTabs();
                 return true;
            }
            else if (status == "errors")
            {
                var errorElements = xmlDoc.getElementsByTagName("error");
                var errors = "";

                for (var x= 0; x < errorElements.length; x++) 
                {
                    errors += errorElements[x].childNodes[0].nodeValue + "<br>";
                }

                $('#personalmessage').show();
                $("h2").html(errors);   
                e.preventDefault();
                return false;
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            $('#personalmessage').show();
            $("h2").html(errorThrown);  
            return false;
        }
    });
};

$(function() {
    $('#tabs').on('click', '#submit1', function() {
        $tabfuncs[0]();
    });
});
于 2013-01-25T20:22:22.533 回答