2013-06-11 92 views
0

我在這裏做的是某種聊天界面,您可以在窗口中拖動您的在線和離線聯繫人。我堅持嘗試創建一個函數來檢查您是否已經打開聊天窗口以避免重複的窗口。這是我到目前爲止的鏈接。 s2.enigmind.com/jgonzalez/nodeChat我希望你們能看到它。檢查元素是否不在數組中以打開窗口

這是我追加窗口元素這個函數得到一些參數,我從JSON獲得的參數,這些參數是用戶ID名稱和狀態的函數。

function displayChatWindow(user, status, avatar, id){ 
    var template = _.template($("#windowTemplate").html(), {userName: user, userStatus: status, userAvatar: avatar, userId: id}); 
    stackingWidth = stackingWidth - boxWidth; 
    /*console.log(stackingWidth);*/ 
    $("body").prepend(template); 
    $(".messages-container").slimScroll({ 
     height: '200', 
     size: '10px', 
     position: 'right', 
     color: '#535a61', 
     alwaysVisible: false, 
     distance: '0', 
     railVisible: true, 
     railColor: '#222', 
     railOpacity: 0.3, 
     wheelStep: 10, 
     disableFadeOut: false, 
     start: "bottom"  
    }); 
    $("#" + id).css({ 
     top: absoluteY, 
     left: stackingWidth 
    }); 
    $("#" + id).find(".minimize").on("click", displayOthersChat); 
    $(".chat input, .chat textarea").on("focus", cleanInputs); 
    $(".chat input, .chat textarea").on("blur", setInputs); 
    addWindow(id, stackingWidth); 
} 

什麼我在我的全球範圍內被稱爲var openedWindows = [];一個數組,這個數組中,我追加的用戶ID和位置與addWindow功能。

function addWindow(id, offset){ 
    openedWindows.push({ 
     id: id, 
     offset: offset 
    }) 
} 

到目前爲止,每次我打開一個新的窗口,這個人是添加到陣列中的時候,我一直在使用一個for循環來看看用戶和ID已在陣中,但我不」實際上我知道如何構造我的代碼,因爲沒有辦法在第一次檢查用戶是否在數組中,因爲數組是空的,我會很感激,如果你們知道我可以如何實現這一點,我知道我的代碼是不是最好的,這一切都是爲了我的學習目的,所以我接受所有類型的提示!非常感謝你。

+1

你可以做'$( 「#」 + ID).length'到看看這個元素是否存在,真的不需要數組? – adeneo

+0

我在o_O –

回答

1

您已經使用underscore.js,爲什麼不能在openedWindows對所有條目使用其​​功能循環:

function addWindow(id, offset) { 
    var found = false; 

    _.each(openedWindows, function(el, idx) { 
     // 'el' is an item in openedWindows, and 'idx' is its position in the array 
     if (el.id === id) { 
      found = true; 
     } 
    }); 

    if (found === false) { 
     openedWindows.push({ 
      id: id, 
      offset: offset 
     }); 
    } 
} 
+1

之前也沒有考慮過,向全局範圍添加變量是一個非常糟糕的主意。要麼修復'openedWindows'的作用域,要麼改變你的代碼,所以你根本不需要數組。 –

+0

是的,以及即時通訊新的JavaScript,我沒有太多的經驗做這種事情,所以即時通訊研究和閱讀如何我可以做到這一點在面向對象的JavaScript,但我仍然沒有得到它很好。 –

+0

非常感謝您的回覆!這工作真的很好,我用它在另一個功能,一個誰檢查JSON,現在工作真的很好,我也讀了下劃線_.each函數,但我實際上得不到很好,它是如何工作的,我的意思是像元素和索引的函數一樣:/ –