2

、、、、の5 つの要素firstNameを持つフォームがあります。lastNameusernamepasswordpasswordConfirmation

var errors = [];
var errorsText = [];


function generateError(messageText, elementIdentifier) {
var messageText = messageText;
var elementIdentifier = elementIdentifier;
errors.push(elementIdentifier);
errorsText.push(messageText);
return false;
}



function validateRegistrationForm(firstName, lastName, username, password, passwordConfirmation) {
formReset();
//alert("validateRegistrationForm() has been called");

var firstName = firstName;
//alert("First Name = \'" + firstName + "\'");
var lastName = lastName;
//alert("Last Name = \'" + lastName + "\'");
var username = username;
//alert("Username = \'" + username + "\'");
var password = password;
//alert("Password = \'" + password + "\'");
var passwordConfirmation = passwordConfirmation;
//alert("Password Confirmation = \'" + passwordConfirmation + "\'");

if ( ( firstName == null ) || ( firstName == "" ) ) {
    //alert("//firstname hasn't been filled out");

    generateError("You must provide a First Name", "firstName");
} 

if ( ( lastName == null ) || ( lastName == "" ) ) {
    //lastname hasn't been filled out
    generateError("You must provide a Last Name", "lastName");
}

if ( ( username == null ) || ( username == "" ) ) {
    //username hasn't been filled out
    generateError("You must enter a Username", "username");
}

if ( ( password == null ) || ( password == "" ) ) {
    //password hasn't been filled out
    generateError("You haven\'t entered a password", "password");
}

if ( ( passwordConfirmation == null ) || ( passwordConfirmation == "" ) ) {
    //passwordconfirmation hasn't been filled out
    generateError("You haven\'t confirmed your password", "passwordConfirmation");
}

validatePassword(password, passwordConfirmation);

}

すべてを処理するより良い方法はありif statementsますか?

4

4 に答える 4

5

フィールド名とエラー メッセージのマップを作成することを検討してください。

var errorMessages = {
  firstName:"You must provide a First Name",
  lastName: "You must provide a Last Name",
  username: "You must enter a Username",
  password: "You haven't entered a password",
  passwordConfirmation: "You haven\'t confirmed your password"
};

そして、条件付きでエラーをスローするための小さなヘルパー関数かもしれません:

var assertIsFilled = function(name, value) {
  if(!value) {
    generateError(errorMessages[name], name);
  }
});

これにより、検証関数がうまくクリーンアップされます。

function validateRegistrationForm(firstName, lastName, username, password, passwordConfirmation) {
  formReset();
  assertIsFilled("firstName", firstName);
  assertIsFilled("lastName", lastName);
  assertIsFilled("username", username);
  assertIsFilled("password", password);
  assertIsFilled("passwordConfirmation", passwordConfirmation);

  validatePassword(password, passwordConfirmation);
}
于 2013-01-13T00:25:08.057 に答える
1

これは、論理 ORショート サーキットを使用できるもののように見えます

function validateRegistrationForm(firstName, lastName, username, password, passwordConfirmation) {
    formReset();
    firstName || generateError("You must provide a First Name", "firstName");
    lastName || generateError("You must provide a Last Name", "lastName");
    username || generateError("You must enter a Username", "username");
    password || generateError("You haven\'t entered a password", "password");
    passwordConfirmation || generateError("You haven\'t confirmed your password", "passwordConfirmation");
    validatePassword(password, passwordConfirmation);
}
于 2013-01-13T00:32:08.440 に答える
0

と の両方nullをチェックするのempty stringではなく、値が真であるかどうかだけをチェックできます。

if (firstName) { 
 // value is truthy 
}

または、次のように使用できます。

if (!firstName) {
 // value is non-truthy
 generateError("You must provide a First Name", "firstName");
}
于 2013-01-13T00:19:37.767 に答える
0

このようなことができますか?:

jQuery(":input").bind("blur change",function(){
     if(jQuery(this).val()===null || jQuery(this).val()===""){
     generateError();
    }
})

また、この方法で検証する必要のない入力を除外することもできます。

生の JS バージョン:

var inputs = document.getElementsByTagName('input');

for (var i=0, len=inputs.length; i<len; i++){
    if (inputs[i].type == 'text'){      
        inputs[i].onclick = function(){ 
              if(this.value===null || this.value===""){
                generateError();
              }       

        }
//same for onBlur
    }
}
于 2013-01-13T00:25:14.093 に答える