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如果我尝试了相同的方法,但在给两个文本框都提供了相同的值后,我仍然没有得到平衡,它会显示验证消息,表明值不相同