1

我一直在寻找很长一段时间没有成功。我想检测特定的 jquery ui 对话框何时失去焦点。我知道我可以像这样检测到它何时获得焦点:

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

但是,我尝试过的任何方式都不会触发 focusout 事件:

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

这是我的(PHP 回显)代码:

<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 对话框是前面的那个。

4

1 回答 1

0

由于没有人回答,我将简要回答我的想法。jQuery 的blurfocusout似乎不会触发我的对话框:

尝试侦听对话框小部件的事件时:

$(".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'); });

一个骇人听闻的解决方案(如果页面上有很多 ui-dialogs 可能会有点重,因为在我的情况下发生了这种情况,但它仍然有效,是侦听 ui-dialogs 上的点击事件:

$(".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 我迭代所有对话框。ZIndex 最高的位于顶部,其余的则不在(因此失去焦点):

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-dialog 失去焦点时会以某种方式触发回调,那就太好了,但我似乎无法在网络上找到另一个解决方案,而且我无法触发 blur 或 focusout。

于 2013-04-11T17:05:45.970 回答