2016-06-29 9 views
0

以前の関数の戻り値がtrueの場合、onchange内の関数を呼び出す方法 onchangeイベントで多くの関数を呼び出していますが、最後の関数は呼び出す必要があります直前の関数の戻り値がtrueの場合。私のコードは怒鳴るです:onchangeイベントでJavaScript関数の戻りを確認する方法

<input type="text" name='test' id="test" onchange="remLdZero('test'); validatetest(); if(checkDuplicate('test', 'url','divid')===true){ nextfunction();};" maxlength="10" required> 

私jvascript checkDuplicateは()

function checkDuplicate(fieldId,page,msgArea){ 
    var fieldVal= $('#'+fieldId).val(); 
    $.ajax({  
     type: "POST", 
     url: page, 
     data: fieldId+'='+fieldVal,  
     //dataType: "html",  
     success: function(data){ 
      if(data == 1){ 
       $('#'+msgArea).css("display","none"); 
       if(fieldId == 'test'){ 
        return true; 
       } 
      }else{ 
       $('#'+msgArea).html(data); 
       $('#'+msgArea).css("display","block"); 
      } 
     } 
    }); 
} 

注意を下回っている:私は私のnextfunction() instadeのreturn trueラインを呼び出した場合、それは)私のnextfunction(としてではなく働き、その後ポップアップをもたらしますブラウザはポップアップをブロックしますが、私がonchangeのnext関数を呼び出すと、それが動作する前の関数をチェックすることなく呼び出されます。

これを修正するための解決策です。

+0

checkDuplicateのAjax-Requestは非同期であり、success-methodはcheckDuplicateの外部で実行されるため、返す真の値を得る方法はありません。意味:checkDuplicateが終了し、trueを返すかどうかをチェックすると、成功はまだ実行されておらず、戻り値はsuccess関数の場合のみです。 – Vaelor

+1

上記のコメントは正しいです。 AJAX呼び出しの結果に応じて何かしたいのであれば、それに依存するコードはajaxメソッドの "成功"関数(またはそこから呼び出される関数)になければなりません。この種の依存関係を作成する別の方法は、もう少し複雑なjQuery Promisesを使用することです。 – ADyson

+2

'checkDuplicate'関数にコールバック関数として' nextFunction'を送ります。あなたのajaxの成功イベントの中でコールバック関数を実行してください。 –

答えて

0

ここに行きます。

HTML

<input type="text" name='test' id="test" onchange="remLdZero('test'); validatetest(); checkDuplicate('test', 'url','divid', nextfunction);" maxlength="10" required> 

JS

function checkDuplicate(fieldId,page,msgArea,callBakFn){ 
var fieldVal= $('#'+fieldId).val(); 
$.ajax({  
    type: "POST", 
    url: page, 
    data: fieldId+'='+fieldVal,  
    //dataType: "html",  
    success: function(data){ 
     if(data == 1){ 
      $('#'+msgArea).css("display","none"); 
      if(fieldId == 'test'){ 
       if(typeof callBakFn == "function"){ 
        callBakFn(); 
       } 
      } 
     }else{ 
      $('#'+msgArea).html(data); 
      $('#'+msgArea).css("display","block"); 
     } 
    } 
}); 
} 

今すぐあなたのnextFunctionあなたのAjaxリクエストが行われ、ウル結果がtrueでされた後にのみ実行されます。

関連する問題