2013-04-08 65 views
1

我一直在寻找相当一段时间没有成功。我想检测一个特定的jQuery UI对话框何时失去焦点。 我知道,当它获得焦点,像这样我能察觉:jquery ui对话框如何检测焦点丢失

focusout: function(event, ui) { console.log('focus out: '+this.id);} 

这是我(PHP的回声”:

focus: function(event, ui) { console.log('focus in: '+this.id); } 

然而,事件的内容的事件没有得到任何方式我试过触发ed)代码:

<script type=\"text/javascript\"> 
$(\"".$element."\").click(function(e){ 
    $(\"#".$divname."\").load('".$url."').dialog({ 
    title: '".$title."', 
    modal:".$modal.", 
    resizable: true, 
    width:'".$width."', 
    height:'".$height."', 
    show: 'clip', 
    hide: 'clip', 
    open: function(event, ui) {\$(\".ui-widget-overlay\").css({'background-image': 'url(\"../css/stripe_small.png\")','background-repeat':'repeat', 'opacity':'0.8'})}, 
    minimize: '#toolbar', 
    focus: function(event, ui) { console.log('focus in: '+this.id); }, 
    focusout: function(event, ui) { console.log('focus out: '+this.id);}}); 
    }); 
</script> 
<div id=\"".$divname."\"></div>"; 

除了焦点检测外,一切正常。有没有办法做到这一点,或者我必须遍历所有的窗口元素来找出哪个焦点?

编辑:另外,我想知道如果我能找到哪个UI对话框是前面的那个。

+0

您是否将模态设置为true?如果是这样,你可以绑定点击在对话框后创建的'

'。 – j08691 2013-04-08 13:35:34

+0

@ j08691不幸的是,他们中没有人被设置为模态。我正在尝试检测哪个对话框在前面,并改变了后面的对话框的外观。 – 2013-04-08 13:45:12

回答

0

既然没有人回答,我会简单回答我所提出的。 jQuery的模糊事件的内容似乎并没有引起我的对话:

当试图监听一个对话框控件的事件:

$(".ui-dialog.ui-widget.ui-widget-content.ui-corner-all.ui-draggable.ui-resizable").blur(function({ //NOP }); 

当试图监听使用的divname事件对话框:

$("#divname").blur(function({ //NOP }); 

不要触发。 古怪的是,的focusIn没有工作:

$("#divname").focusin(function({ console.log('focused in'); }); 

一个hackish的解决方案(这可能是,如果有,因为它恰巧在我的情况下,页面上的许多用户界面的对话框有点重,但它的工作原理尽管如此,是听对UI的对话框单击事件:

$(".ui-dialog.ui-widget.ui-widget-content.ui-corner-all.ui-draggable.ui-resizable").live('click',function(){ 
    $(this).addClass('ui-active').removeClass('ui-inactive'); 
}); 

这里做的事情是完全相反:不是试图检测一个对话框失去焦点,的onclick我遍历所有对话框最高Z-索引处于一个。顶部,其余都没有(因此失去了重点):

var topZindex = 0; 
$(".ui-dialog.ui-widget.ui-widget-content.ui-corner-all.ui-draggable.ui-resizable").each(function(){ 
    var thisZindex = parseInt($(this).css('zIndex'), 10); 
    if (thisZindex > topZindex) topZindex = thisZindex; 
}); 

如果某个回调会在整个UI对话框丢失焦点时触发,但我似乎无法在Web上找到另一个解决方案,并且无法获得模糊或聚焦触发,这将非常好。