2016-05-02 24 views
1

別の機能が完了したら機能を実行するのに問題があります。私はこのポストのようなコールバックを試みますが、これは役に立たないでしょうExecute jquery function after another function completes多分私は何か間違っているか、私の場合はもっと複雑です。他の機能が完了した後に機能を実行する方法

だから、私はこの後

$("#search-form").submit(ajaxSubmit(addSearchfuntion)); // addSearchfuntion is callback 

function ajaxSubmit(callback) { 
    var $form = $(this); 
    var settings = { 
     data: $(this).serialize(), 
     url: $(this).attr("action"), 
     type: $(this).attr("method") 
    }; 

    $.ajax(settings).done(function(result) { 
     var $targetElement = $($form.data("ajax-target")); 
     var $newContent = $(result); 
     $($targetElement).replaceWith($newContent); 
     $newContent.effect("slide"); 
    }); 

    callback(); 

    return false; 
}; 

フォーム私は私のページに新しいフォームを得るとき、私はこの新しいフォームを処理する別の関数を実行したいを提出したときに実行する機能を有しています。

function addSearchfuntion(){ 
    $('.Amount').change(updateQuantity); 
} 

このケースを解決するにはどうすればよいですか?

+0

@Rifky、Whats that – Satpal

+0

oops。間違ったリンクを貼り付け..この質問をチェック.. http://stackoverflow.com/questions/30606021/javascript-execute-function-after-other-function-completes?lq=1 – Rifky

答えて

1

非同期であるメソッド内でコールバック電話をかけるためにかなり近い必要があるあなた。現在のところ、ajaxSubmit()メソッドを実行し、その戻り値、つまりfalseをイベントハンドラとしてバインドしています。

$("#search-form").submit(function(){ 
    ajaxSubmit.bind(this)(addSearchfuntion); 
}); 

そして、単にajaxSubmitで関数を返す$.ajax()

$.ajax(settings).done(function(result) { 
    // Your existing code 
    .... 
    .... 
    // call the callback 
    callback(); 
}); 
+0

ありがとう、それは素晴らしい作品 – cyprian

0

、あなたはあなたがsubmitイベントハンドラをバインドするために無名関数を使用する必要が

function ajaxSubmit(callback) { 
    // this will be executed linear 
    var $form = $(this); 
    var settings = { 
     data: $(this).serialize(), 
     url: $(this).attr("action"), 
     type: $(this).attr("method") 
    }; 

    // this will be executed async 
    $.ajax(settings).done(function(result) { 

     // anything in here must be handled async, hence put your callback here 

     var $targetElement = $($form.data("ajax-target")); 
     var $newContent = $(result); 
     $($targetElement).replaceWith($newContent); 
     $newContent.effect("slide"); 

     // call the callback 
     callback(); 
    }); 

    // this will be executed linear and most likely before the async method 
    return false; 
}; 
0

done()コールバックメソッドでcallbackメソッドを呼び出します。

function ajaxSubmit(callback) { 
    return function(){ 
    var $form = $(this); 
    var settings = { 
    data: $(this).serialize(), 
    url: $(this).attr("action"), 
    type: $(this).attr("method") 
    }; 

    $.ajax(settings).done(function(result) { 
    var $targetElement = $($form.data("ajax-target")); 
    var $newContent = $(result); 
    $($targetElement).replaceWith($newContent); 
    $newContent.effect("slide"); 
    }); 

    callback(); 

    return false; 
} 
}; 
0

はあなたのajax(settings).doneセクションであなたのcallback実行を置きます。それは次のようになりたい:

$.ajax(settings).done(function(result) { 
    var $targetElement = $($form.data("ajax-target")); 
    var $newContent = $(result); 
    $($targetElement).replaceWith($newContent); 
    $newContent.effect("slide"); 

    if (typeof callback === "function") { 
     callback(); 
    } 
}); 

ます。また必ずcallbackif (typeof callback)...チェックの考え方がある、それを呼び出す前に存在するためにチェックする必要があります。詳細についてはSee this answerをご覧ください。

関連する問題