2013-04-08 72 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上找到另一個解決方案,並且無法獲得模糊或聚焦觸發,這將非常好。