2012-01-08 68 views
0

我有一個像虛擬桌面一樣工作的應用程序(圖標在底部的水平條中)。當你點擊一個圖標時,會打開一個窗口(動態創建)。如果您點擊另一個(或同一個)圖標,則另一個窗口向下打開10px,向右打開10px,並移至最上面。將窗口移動到頂部時出現問題

當窗口被創建時,下面的函數會向窗口添加一個單擊事件。如果窗口被點擊,它會移動到頂部。

現在來解決問題。其中一個窗口包含圖像縮略圖。當點擊一個圖像時,將創建一個新的窗口,圖像尺寸爲全尺寸。我希望具有全尺寸圖像的新窗口放置在頂部,這不會發生,因爲在縮略圖窗口上創建新窗口後會觸發事件(在moveOnTop函數中)(因爲點擊時單擊了該窗口在縮略圖上)。

我想解決這個問題的一種方法是,如果可以防止點擊縮略圖時觸發事件,儘管我不知道如何。否則可能是解決這個問題的好方法?提前致謝!

Windows.prototype.moveOnTop = function(){ 
var container = '#desktop'; 

    $(container).on('click', '.window', function() { 
     var thisWindow = $(this); 
     if(thisWindow.next().length > 0){ 
      thisWindow.appendTo('#desktop'); 
     } 
    }); 
}; 

回答

1

裏面的單擊事件處理程序的縮略圖,你可以取消其他(父)元素的事件:

$("img.thumbnail").on("click", function(e) { 
    ... 

    // Finally, prevent the click event from bubbling up to parent elements 
    e.stopPropagation(); 
}); 

參見:event.stopPropagation()

+0

工程就像一個魅力,謝謝! – holyredbeard 2012-01-08 17:04:45

1

那要看情況而定。如果兩種情況都由同一個事件處理程序處理,則可以簡單地與event.target進行比較。

另一方面,如果您已將另一個事件處理程序綁定到圖標的click事件,並且您試圖阻止單擊圖標時觸發窗口的click事件,則可以讓事件處理程序返回false或致電event.stopPropagation(),就像這樣:

$('.icon').click(function(event) { // <-- parameter 'event' is automatically passed to handlers 
    // Open window with icons 
    event.stopPropagation(); 
}); 

NB:從我所知道的,你還(重新)連接的click處理程序所有窗戶在moveOnTop功能。有關解決方案,請參閱my answer to your previous question

+0

我會檢查你的答案,謝謝! :) – holyredbeard 2012-01-08 18:20:28

+0

我更新了代碼。這是正確的,對嗎? – holyredbeard 2012-01-08 18:55:40

+0

@Jason:只要你在整個應用程序初始化時調用'moveOnTop'一次,是的。如果每次創建窗口時都調用'moveOnTop',那麼當您創建窗口時,您仍將多個事件偵聽器附加到'#desktop'。 – PPvG 2012-01-08 20:44:27

相關問題