带返回值的验证函数

时间:2012-06-18 07:58:22

标签: javascript jquery

我有一个共同的验证功能

function connect_and_update_destination() {
        var flag = true;
        // Validate IP
        if (!validate_ip_address()) {
            alert(protect.lang.enter_valid_ip);
            return;
        }

        if ($('#pjm_alias').val() === '') {
            $('#pjm_alias').focus();
            alert(protect.lang.enter_alias);
            return;
        }

        if ($('#pjm_auth_name').val() === '') {
            $('#pjm_auth_name').focus();
            alert(protect.lang.enter_auth_name);
            return;
        }

        if ($('#pjm_auth_password').val() === '') {
            $('#pjm_auth_password').focus();
            alert(protect.lang.enter_auth_pwd);
            return;
        }
        var ip = $('#pjm_ip1').val()+'.'+$('#pjm_ip2').val()+'.'+$('#pjm_ip3').val()+'.'+$('#pjm_ip4').val();
        return establish_connection(ip, $('#pjm_alias').val(), $('#pjm_auth_name').val(), $('#pjm_auth_password').val());
    }


成功验证后,它总是返回 establish_connection(),我的问题是我这样称呼 connect_and_update_destination()

function first_call(){
  connect_and_update_destination();
}
function second_call(){
  connect_and_update_destination();
}


第一次调用后我需要在成功验证 establish_connection()后返回,但是当我使用第二个函数[second_call()]调用它时,它不应该返回 establish_connection()返回 establish_connection()我只需要返回。但我怎么能这样做,意味着当我使用 second_call()调用时,我不想进入establish_connection()。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以向connect_and_update_destination函数添加参数:

function connect_and_update_destination(establishConnection) {
    var flag = true;
    // Validate IP
    if (!validate_ip_address()) {
        alert(protect.lang.enter_valid_ip);
        return;
    }

    if ($('#pjm_alias').val() === '') {
        $('#pjm_alias').focus();
        alert(protect.lang.enter_alias);
        return;
    }

    if ($('#pjm_auth_name').val() === '') {
        $('#pjm_auth_name').focus();
        alert(protect.lang.enter_auth_name);
        return;
    }

    if ($('#pjm_auth_password').val() === '') {
        $('#pjm_auth_password').focus();
        alert(protect.lang.enter_auth_pwd);
        return;
    }

    if (!establishConnection) {
        return;
    }

    var ip = $('#pjm_ip1').val()+'.'+$('#pjm_ip2').val()+'.'+$('#pjm_ip3').val()+'.'+$('#pjm_ip4').val();
    return establish_connection(ip, $('#pjm_alias').val(), $('#pjm_auth_name').val(), $('#pjm_auth_password').val());
}

然后:

function first_call() {
    connect_and_update_destination(true);
}
function second_call() {
    connect_and_update_destination(false);
}

答案 1 :(得分:1)

你可以做一些像传递变量一样简单的事情。

function connect_and_update_destination(establishConnection) {

 ...

 if(!establishConnection)
   return;

 return establish_connection(ip, $('#pjm_alias').val(), $('#pjm_auth_name').val(), $('#pjm_auth_password').val());
}

function first_call(){
  connect_and_update_destination(true);
}
function second_call(){
  connect_and_update_destination(false);
}

对于更通用的解决方案,您可以传递回调:

function connect_and_update_destination(callback) {

    ...

    if(typeof callback === 'function') {
       return callback(ip);
    }

    return;
}

function first_call() {
    var result = connect_and_update_destination(function(ip) {
       return establish_connection(ip, $('#pjm_alias').val(), $('#pjm_auth_name').val(), $('#pjm_auth_password').val());
    });
}

function second_call() {
    connect_and_update_destination();
}