2016-08-10 20 views
1

2つの.click()呼び出しを「連鎖したい」が、動作させることはできません。 ブラウザでJSコードをデバッグするとコードが機能します(遅れても動作しているようです)2回目の.click()イベントを最初に実行した後に実行します

私は何とか最初の.click()が必要です(最初のイベントがそうです)。それが完了した場合にのみ、2番目の.click()を実行します。

マイコード:

$.post("settings?type=mail&nr=" + nr, function(data){ 
    if(data != ""){ 
     alert(unescape(data)); 

     // First click event -> realoads the page 
     $("#change_settings").click(); 

     // Second click event -> navigates to a tab 
     // inside the page loaded by the first click event 
     $("#tab_mail_header" + nr + "").click(); 
    } 
}); 

EDIT:より多くのコード

function load_change_settings_view(e){ 
    e.preventDefault(); 
    $("#content").empty(); 
    // load settings.jsp in a div (test) inside the mainpage 
    $("#content").load("settings.jsp #test", function(){ 
     // In here are a couple of .click() & .submit() functions but nothing else 
    }); 
});  


$("#change_settings").click(function(e){ 
    load_change_settings_view(e); 
}); 

EDIT:それはあるとして、

$("#change_settings").click(); 
    window.setTimeout(function() { 
     $("#tab_mail_header" + nr + "").click(); 
}, 1000); 

私もそれのように本当にいけない:私は現在、このコードを持っています時間が遅れ、遅いクライアントでは1秒のタイムアウトでは不十分である場合があります。私はかかわらず、これらのようなポストのカップルを見て

...これが速く、クライアントとユーザーのためのワークフローを減速させるよう高すぎるタイムアウトを設定する必要はありません:

JQuery .done on a click event

Wait for a user event

How to wait till click inside function?

Wait for click event to complete

誰かがこれを動作させる方法のアイデアを持っていますか?あなたが持っている場合

コードスニペット#1

$.post("settings?type=mail&nr=" + nr, function(data){ 
    if(data != ""){ 
     alert(unescape(data)); 
     // create event object 
     var evt = document.createEvent('MouseEvents'); 
     evt.initEvent('click', true, false); 
     // call method manually (not called by actual button click like its supposed to be) 
     // - pass event object 
     // - additional parameter to specify the tab the user is viewing 
     load_change_settings_view(evt, "tab_mail_header" + nr); 
    } 
}); 

コードスニペット#2

function load_change_settings_view(e, p_tab){ 
    e.preventDefault(); 
    $("#content").empty(); 
    // load settings.jsp in a div (test) inside the mainpage 
    $("#content").load("settings.jsp #test", function(){ 

     // Go to previous tab (if one was selected) 
     var prev_tab = p_tab; 
     if(typeof prev_tab != 'undefined'){ 
      $("#" + prev_tab).click(); 
     } 
     // In here are a couple of .click() & .submit() functions but nothing else 
    }); 
}); 

はコメントして自由に感じる:私は、次の解決策になってしまった以上、いくつかの試みの後

+0

どのように「ページを読み込みますか?」コンテンツをajax経由で読み込むことを意味しますか?次に、ajax呼び出しの成功コールバック関数で2番目のイベントをトリガーする必要があります。 – chrisbergr

+0

ページリロードが呼び出された後、何も実行されません。それを考慮してコードを再構成します。 – Stack

+0

新しいページに_GET変数や何かを追加する必要があります。そこで、そのパラメータを使用したいタブをクリックすることができます。 – Victor

答えて

1

この問題の解決方法や他の提案がある場合は、より良いアイデア

関連する問題