1

我有一个通用的验证功能

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());
    }


成功验证后,它总是返回建立连接(),我的问题是我像这样调用这个connect_and_update_destination()

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


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

提前致谢。

4

2 回答 2

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);
}
于 2012-06-18T08:02:11.867 回答
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();
}
于 2012-06-18T08:02:12.523 回答