2012-01-08 92 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