1

簡単な質問があります。さまざまな属性を持つチャットのフォームを開くパラメーターemp_idを持つ関数があります。これは、10秒ごとに自動的に更新されるようにしたいのですが、パラメーターemp_idがあるため、少し間違って動作します。は変更できます。変更すると、メッセージとフォームのチャットが2回または3回更新されます:) emp_idを変更した回数によって異なりますが、明確になっているといいのですが))とにかくここにjavascript関数があります。

function load_chat(emp_id) {
        var url = "#request.self#?fuseaction=objects2.popup_list_chatform"
        url = url + "&employee_id=" + emp_id;
        document.getElementById('form_div').style.display = 'block';                            AjaxPageLoad(url,'form_div',1,'Yükleniyor');
        setInterval( function() { 
            load_chat(emp_id); 
        },10000);
}

名前のリストがあります。名前の1つをクリックすると、このフォームがこの関数によって開かれますが、別のユーザーをクリックすると、emp_idを変更すると、前のフォームと現在のフォームが更新されます。最後のemp_idのみを更新し、変更したすべてのIDを更新しないように変更するにはどうすればよいですか?

助けてくれてありがとう、本当に感謝しています!

4

2 に答える 2

2

これは、あなたがしていることをうまくカプセル化します。タイマー ID ( tid) はクロージャー内に保持されるため、呼び出したときに、load_chat実行中のインターバルがあれば停止します。

新しい URL が設定されると、インターバル タイマーが再び開始されます。

var ChatModule = (function() {
    var tid,
    url;

    function refresh()
    {
        AjaxPageLoad(url, 'form_div', 1, 'Yükleniyor');
    }

    return {
        load_chat: function(emp_id) {
            if (tid) {
                clearInterval(tid);
            }
            // setup url
            url = "#request.self#?fuseaction=objects2.popup_list_chatform"
            url = url + "&employee_id=" + emp_id;
            document.getElementById('form_div').style.display = 'block';
            // load ajax
            refresh();
            // set timer
            tid = setInterval(refresh, 10000);
        }
    }
}());

ChatModule.load_chat(123);
于 2012-06-14T13:17:08.183 に答える
0

setTimeout代わりに使用してください。関数が実行されるたびに、次の実行が設定されます (条件付きにすることもできます)。

function load_chat(emp_id) {
    ... // do something
    if (condition_still_met)
        setTimeout(function() { 
            load_chat(emp_id); // with same id
        }, 10000);
}
load_chat("x"); // to start

または、関数の外で setInterval を使用する必要がありload_chatます。必要に応じて間隔をクリアできます。

function get_chat_loader(emp_id) {
    return function() {
        ... // do something 
    };
}
var id = setInterval(get_chat_loader("x"), 10000); // start

// then, somewhen later:
clearInterval(id);
于 2012-06-14T13:11:05.250 に答える