2012-02-20 142 views
3

我有一个特定的类的div,我委派了一个点击事件,所以当它被点击我切换其类与另一个,并打开一个对话框,现在当对话框正在关闭,我切换到原始关闭对话框后关闭对话框后按ESC键(仅铬)

现在到有趣的部分...如果我按键盘上的esc键类继续切换。 ..这种情况只在Chrome浏览器

说明重现: 在Chrome中: 点击DIV - >对话会开 - >关闭 - >启动按Esc键按钮 - 的颜色正在执行格将被更改的原因的对话框关闭功能(这导致格类切换)

在FF和IE它工作得很好,并没有ESC的问题存在

这里是js代码段

$(document).ready(function() { 
    $(document).delegate(".dashboard_widget", "click", function(){ 
    $(this).toggleClass('dashboard_widget').toggleClass('dashboard_widget_clicked'); 
    showDialog(); 
    }); 

}); 
function showDialog(){ 
    $("#dialogID").dialog({ 
     buttons: { 
      Close: function() { 
       $(this).dialog("close"); 
      } 
     }, 
     close: function (event, ui) { 
      $("#myID").toggleClass('dashboard_widget_clicked').toggleClass('dashboard_widget'); 
     } 
    }); 
} 
提前

I reproduced it in jsfiddle

感谢,

丹尼尔。

回答

2

解决它,这要归功于罗里的想法

设置。数据与假/真为了知道何时对话框打开/关闭

这里是代码(JS)

的主要片段
$(document).ready(function() { 
    $(document).delegate(".dashboard_widget", "click", function(){ 
    $(this).toggleClass('dashboard_widget').toggleClass('dashboard_widget_clicked'); 
    showDialog(); 
    }); 

}); 
function showDialog(){ 
    $("#myID").data('closed',false);  
    $("#dialogID").dialog({ 
     buttons: { 
       Close: function() { 
        $(this).dialog("close"); 
       } 
      }, 
     close: function (event, ui) { 
      if($("#myID").data('closed')!==true){ 
       $("#myID").toggleClass('dashboard_widget_clicked').toggleClass('dashboard_widget'); 
       $("#myID").data('closed',true); 
      } 
     } 
    }); 
} 

jsfiddle Full Solution

+0

后面提供解决方案很好的解决方法。这可能是值得提出你与jQueryUI开发者的问题。 – 2012-02-20 12:38:52

1

这是因为escape键附加到对话框的close方法。因为你已经将你的toggleClass挂钩了这个方法,所以在每次按键时改变这个类。

当对话框没有打开时,Firefox和IE似乎忽略了esc按键,因此Chrome没有这个问题。

不改变插件的代码我不认为有很多可以解决这个问题。

+0

TNX的信息......它给了我一个想法......将使用。数据来,如果打开的对话框中,以告诉FALE与/真设置它,并在案件关了d我不会执行关闭代码块,在jsfiddle – Daniel 2012-02-20 12:10:12