2012-06-18 75 views
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()); 
    } 


成功驗證之後,它總是返回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() insted的回報establish_connection的()我只需要返回。但我怎麼能這樣做,意思是我不想輸入establish_connection()時,我打電話使用second_call()

在此先感謝。

+0

如果烏拉圭回合按鈕調用然後顯示烏爾按鈕代碼 –

回答

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

這個問題是不是在第二solved.Because調用它不檢查所有驗證。當第二次調用從驗證函數啓動它的剛剛返回時,它的驗證ip地址等。 –

+2

你在哪裏驗證這個「ip」地址? 'establish_connection'函數內部?如果是這樣,你必須將'establishConnection'參數傳遞給這個函數,以便它可以驗證'ip',但不做任何你不想做的事情。 –