Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui jquery ui对话框如何检测焦点丢失_Jquery Ui_Dialog_Focus_Jquery Ui Dialog_Lost Focus - Fatal编程技术网

Jquery ui jquery ui对话框如何检测焦点丢失

Jquery ui jquery ui对话框如何检测焦点丢失,jquery-ui,dialog,focus,jquery-ui-dialog,lost-focus,Jquery Ui,Dialog,Focus,Jquery Ui Dialog,Lost Focus,我已经找了很长时间了,但没有成功。我想检测特定jQueryUI对话框何时失去焦点。 我知道我可以检测到它何时获得这样的焦点: focus: function(event, ui) { console.log('focus in: '+this.id); } 但是,focusout事件不会以我尝试过的任何方式触发: focusout: function(event, ui) { console.log('focus out: '+this.id);} 这是我的PHP echo'ed代码: &l

我已经找了很长时间了,但没有成功。我想检测特定jQueryUI对话框何时失去焦点。 我知道我可以检测到它何时获得这样的焦点:

focus: function(event, ui) { console.log('focus in: '+this.id); }
但是,focusout事件不会以我尝试过的任何方式触发:

focusout: function(event, ui) { console.log('focus out: '+this.id);}
这是我的PHP echo'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对话框。

由于没有人回答,我将简要回答我提出的问题。 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'); });
在我的例子中,如果页面上有很多ui对话框,那么一个可能有点麻烦的黑客解决方案是监听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');
});
它的作用正好相反:与其尝试检测失去焦点的对话框,不如单击“我迭代所有对话框”。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对话框失去焦点时,如果能触发回调,那就太好了,但我似乎无法在web上找到其他解决方案,也无法触发模糊或聚焦。

是否将modal设置为true?如果是这样,您可以绑定到在对话框后面创建的上的单击。@j08691否,很遗憾,没有一个设置为模态。我试图检测哪个对话框在前面,并改变后面对话框的外观。