JavaScript中的常见错误消息

时间:2011-06-13 10:09:19

标签: javascript

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中使用单个函数。

这是正确的方法吗?

2 个答案:

答案 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,那么您的方法很好。我将它作为一个更通用的验证方法,它将检查您拥有的每个验证规则,如果失败,则将消息添加到数组中。完成所有检查后,如果数组的计数更大,则为零,然后输出完整的错误列表。