2013-10-28 24 views
0

這是我的問題。請先閱讀下面的代碼。如何判斷div的最外層失去光標?

<div id="outerDiv"> 
<input id="txt" type="text" /> 
<div id="innerDiv" style="display:none;z-index:10;"> 
    some content 
</div> 
</div> 

我想要做的是,內部的div顯示,當光標焦點到輸入和隱藏,如果光標不在外層div的。但是如果光標位於內部div上,內部div將不會被隱藏。我想通過綁定控制內部div對輸入的焦點和聚焦事件的可見性的函數來完成它,但是我失敗了。因爲我無法確定光標在輸入的focusout事件函數中的位置。 我的問題清楚了嗎? Thx在advince。 下面是javascript代碼我使用:

<script type="text/javascript"> 
$(function(){ 
    var outerDiv = $("#outerDiv"); 
    var innerDiv = $("#innerDiv"); 
    var txt = $("#txt"); 
    txt.focus(function() { innerDiv.show(); }); 
    outerDiv.focusout(function() { innerDiv.hide(); }); 
}) 
</script> 

單擊內部DIV的文本時,我不expext是,它不會消失。任何人都遇到了同樣的問題?

+0

你能告訴我你使用的JavaScript代碼嗎? – gypsyCoder

+0

對不起,這是我在這個網站上的第一個問題,我還不熟悉它。我會盡快上傳我的代碼。 – spPower

+0

您沒有提供任何javascript :( – gypsyCoder

回答

0

主要問題是,當我點擊頁面的任何其他地方,然後關閉彈出層innerDiv。如果要通過在外部區域註冊焦點事件來實現效果,結果是我無法在innerDiv上激發事件。因爲單擊innerDiv的元素時,它會首先在關閉innerDiv的outerDiv上觸發focusout事件。所以我意識到我想要的效果不會通過簡單地將聚焦事件註冊到outerDiv來實現。 我通過在文檔上記錄mouseup事件來完成此操作。綁定到mouseup事件的函數是查找srcElent是否是outerDiv的後代,如果沒有則關閉innerDiv。功能如下:

window.onmouseup = function (mouseevt) { 
     var srcElement = mouseevt.srcElement; 
     while (srcElement != null && srcElement != window) { 
      if (srcElement.id== 'outerDiv') { 
       return; 
      } 
      srcElement = srcElement.parentElement; 
     } 
     hideInnerDiv(); 
    };