2009-09-22 49 views

回答

1

試試這個(編輯):

<input type="text" onfocus="doFocus(1)" onblur="doBlur(1)"/> 
<input type="text" onfocus="doFocus(2)" onblur="doBlur(2)"/> 

<script> 
var fstate=[]; // focus state 
fstate[1] = false; 
fstate[2] = false; 

function doit() { alert('lost focus'); } 

function doBlur(i) { 
    fstate[i]=false; 
    // give some time to the other element to receive focus 
    // because the onblur event gets fired before the onfocus 
    setTimeout("if (!fstate[1] && !fstate[2]) doit();",50); 
} 

function doFocus(i) { fstate[i]=true; } 
</script> 
+0

這基本上是我在想的。我希望有一種方法可以避免setTimeout,因爲它看起來有點冒失,但這是我迄今爲止唯一能夠提出的解決方案。 – 2009-09-22 17:41:29

0

試試這個:當文本框被集中,當它失去焦點設置爲false

<input type="text" Id="Text1" onfocus="InTextbox()" onblur="OutOfTextBox()"/> 
<input type="text" id="Text2" onfocus="InTextbox()" onblur="OutOfTextBox()"/> 


<script> 
var inTextBox=false; 
function InTextBox() 
{ 
    inTextBox=true; 
} 
function OutOfTextBox() 
{ 
    inTextBox=false; 
} 

function YourFunction() 
{ 
    if(inTextBox) return; //one of the textboxes has focus so return 
    ....... 
} 
</script> 

變量inTextBox設置爲true。

+0

你沒有在調用事件處理任何事情。不應該 - 'onfocus =「InTextbox()」'?另外,爲什麼不是構造函數(或名稱空間)的大寫名稱? – kangax 2009-09-22 12:54:39

+0

在用戶將焦點從一個文本框直接切換到另一個文本框的用例中,這不起作用 – 2009-12-08 08:31:21