Javascript 移动应用中的验证

Javascript 移动应用中的验证,javascript,html,devextreme,Javascript,Html,Devextreme,在视图中实现验证时,我面临一些问题 PaMobile01.popup = function (params, viewInfo) { "use strict"; var openTabsAsRoot = viewInfo.layoutController.name === "split", isReady = $.Deferred(); function handleViewShown() { loadopetions(); } function validateAn

在视图中实现验证时,我面临一些问题

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
我正试图遵循网站中的一个Devextreme示例。

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
我得到的错误是“未捕获类型错误:无法读取未定义的属性“validate”。单击“完成”按钮时

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
这是我正在使用的代码:` 用户名: 密码: 重新输入密码:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}

})

调用验证的函数必须接收params参数。看看教程中是如何完成的:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
$("#button").dxButton({
    text: "Submit",
    type: "success", 
    onClick: validateAndSubmit
});
库正在处理此params对象。现在,在代码中,您将库所期望的函数隐藏在没有参数的
handlefinish
后面。 您可以将
params
作为参数添加到函数定义中:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
function handlefinish(params) {
    validateAndSubmit(params);
}
或返回该函数本身:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    validateAndSubmit: validateAndSubmit
}
另外,看看您是如何管理该模块的
PaMobile01。弹出
功能,尝试按照教程进行操作

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
更新:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
查看有关重新输入密码验证的文档:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
根据文档,您需要向
#tbx_repassword
的验证器添加验证规则:
[{type:'compare',comparisonTarget:getPassword}]

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
其中,getPassword是一个类似以下的函数:

PaMobile01.popup = function (params, viewInfo) {
"use strict";

var openTabsAsRoot = viewInfo.layoutController.name === "split",
    isReady = $.Deferred();



function handleViewShown() {
    loadopetions();
}


function validateAndSubmit(params) {
    var result = params.validationGroup.validate();
    if (result.isValid) {
        DevExpress.ui.notify({
            message: "You have submitted the form",
            position: {
                my: "center top",
                at: "center top"
            }
        }, "success", 3000);
    }
}

function loadopetions() {
    $("#tbx_userneme").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_password").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

    $("#tbx_repassword").dxTextBox({
        placeholder: 'Required',
    }).dxValidator({
        validationRules: [{
            type: "required",
            message: "City is required"
        }, {
            type: "pattern",
            pattern: "^[a-zA-Z]+$",
            message: "Do not use digits in the City name."
        }, {
            type: "pattern",
            pattern: "^.{2,}$",
            message: "City must have at least 2 symbols"
        }]
    });

}

function handlefinish() {
    validateAndSubmit(params);
}
return {
    isReady: isReady.promise(),
    viewShown: handleViewShown,
    openTabsAsRoot: openTabsAsRoot,
    handlefinish: handlefinish
}
function getPassword(){
  return document.getElementById('tbx_password').value;
}

嗨,我也试过了,但它也在validateAndSubmit函数中抛出错误“Uncaught TypeError:无法读取未定义的属性'validate'”。嗨,我现在能够解决这个问题,非常感谢您的帮助。目前,我在比较两个dxtextbox值时面临一些其他问题。就像上面代码中的password和reinterpassword一样。你能帮我一下吗?Hello@Ori如果我尝试了相同的方法,但在给两个文本框都提供了相同的值后,我仍然没有得到平衡,它会显示验证消息,表明值不相同