AddPatient = {};
AddPatient.Firstname = FirstNameValue || PatientModel.errorMsg('FirstName',FirstNameValue);
AddPatient.LastName = LastNameValue || PatientModel.errorMsg('LastName',LastNameValue);
AddPatient是一个Object,我在发送请求之前检查它是否为空。
PatientModel.js
errorMsg: function(title,FirstNameValue,LastNameValue) {
if(FirstNameValue === undefined || FirstNameValue === ' ' && LastNameValue === undefined || LastNameValue = ' ') {
alert('FirstName and LastName are missing');
return false;
} else {
alert(+title 'is missing');
return false;
}
}
我有一个表单,其中我有FirstName和LastName字段,我必须检查它不应该是空白。我想在javascript中使用单个函数。
这是正确的方法吗?
答案 0 :(得分:2)
我可以在您的代码中看到一些问题。
errorMsg()
的预期参数与其名称之间的不匹配alert()
if
声明errorMsg()
的预期参数与其名称你的errorMsg()
函数需要三个参数,但你一次只能传递两个:
errorMsg: function(title,FirstNameValue,LastNameValue) {
....
}
... and then ....
.errorMsg('FirstName',FirstNameValue);
.errorMsg('FirstName',LastNameValue);
如果你真的想在errorMsg()
中使用这两个值,你需要每次都传递它们,按照函数所期望的顺序传递它们:
PatientModel.errorMsg('FirstName',FirstNameValue,LastNameValue);
PatientModel.errorMsg('LastName',FirstNameValue,LastNameValue);
// This is weird code, but it'll work
alert()
这很容易解决,可能只是一个错字。
alert(+title 'is missing');
^ ^_There's something missing here.
|_This will only try to convert title to a number
你想要的是这个:
alert(title + 'is missing');
if
语句if(FirstNameValue === undefined || FirstNameValue === ' ' && LastNameValue === undefined || LastNameValue = ' ') {
这不会按预期工作,因为&&
的优先级高于||
,这意味着表达式将按此评估:
if (
FirstNameValue === undefined
|| (FirstNameValue === ' ' && LastNameValue === undefined)
|| LastNameValue = ' '
) {
您需要使用括号来修正优先级:
if( (FirstNameValue === undefined || FirstNameValue === ' ') && (LastNameValue === undefined || LastNameValue = ' ') ) {
实际上,这是无关紧要的,因为表达式可以像这样简化:
// If these values are taken from a form input, they are guaranteed to be strings.
if(FirstNameValue.length === 0 && LastNameValue.length === 0) {
甚至更好,像这样:
// Uses regular expressions to checks if string is not whitespace only
var WHITESPACE = /^\s*$/;
if( WHITESPACE.test(FirstNameValue) && WHITESPACE.test(FirstNameValue)){
如果我没有提供正确版本的代码,这将是一个不完整的答案,所以在这里。请注意,我分两步填写信息填写和验证。
PatientModel.js :
validate: function(patient){
var WHITESPACE = /^\s*$/;
var errors = [];
if( WHITESPACE.test(patient.FirstName) ){
// No first name
if( WHITESPACE.test(patient.LastName) ){
// No last name either
errors.push('FirstName and LastName are missing');
}
else {
// Only first name missing
errors.push('FirstName is missing');
}
}
else if( WHITESPACE.test( patient.LastName) ){
// Only last name missing
errors.push('LastName is missing');
}
// Returns array of errors
return errors;
}
Your other code:
AddPatient = {};
AddPatient.Firstname = FirstNameValue;
AddPatient.LastName = LastNameValue;
errors = PatientModel.validate(AddPatient);
if( errors.length != 0 ){
alert('You have the following errors:\n' + errors.join('\n'));
}
编辑:一种不同的,可能更好的方法。唯一的区别是我们现在将validate()写为Patient对象的方法:
>>> PatientModel.js:
var WHITESPACE = /^\s*$/;
// Creates a new empty Patient
function Patient(){
this.FirstName = '';
this.LastName = '';
}
// Adds a validate() method to all Patient instances
Patient.prototype.validate: function(){
var errors = [];
if( WHITESPACE.test(this.FirstName) ){
// No first name
if( WHITESPACE.test(this.LastName) ){
// No last name either
errors.push('FirstName and LastName are missing');
}
else {
// Only first name missing
errors.push('FirstName is missing');
}
}
else if( WHITESPACE.test( thisLastName) ){
// Only last name missing
errors.push('LastName is missing');
}
// Returns array of errors
return errors;
}
>>> Your other code :
patient = new Patient();
patient.FirstName = FirstNameValue;
patient.LastName = LastNameValue;
errors = patient.validate();
if( errors.length != 0 ){
alert('You have the following errors:\n' + errors.join('\n'));
}
答案 1 :(得分:1)
我建议使用Jquery validate plugin来实现此功能。它将允许您进行一系列客户端验证。包括必要的验证。
如果您只想要纯粹的javascript,那么您的方法很好。我将它作为一个更通用的验证方法,它将检查您拥有的每个验证规则,如果失败,则将消息添加到数组中。完成所有检查后,如果数组的计数更大,则为零,然后输出完整的错误列表。