2010-02-09 188 views
2

最近我正在維護一個遺留項目。我在頁面中發現了一個javascript死循環問題。演示代碼如下。當用戶點擊第一個輸入框並鍵入3,然後直接點擊第二個輸入框時,就會出現死循環。現在我的問題是解決或預防這類問題的最佳方法是什麼?萬分感謝。解決這種JavaScript死循環的最佳方法是什麼?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
</head> 
<body> 

<input type="text" name="a" id="a" value="" /> 
<input type="text" name="b" id="b" value="" /> 

<script type="text/javascript" charset="utf-8"> 
var a = document.getElementById("a"); 
a.onblur = function(){ 
    if(a.value.length === 1){ 
     alert("aaa"); 
     a.focus(); 
     a.select(); 
     return false; 
    } 
} 

var b = document.getElementById("b"); 
b.onblur = function(){ 
    if(b.value < a.value){ 
     alert("bbb"); 
     b.focus(); 
     b.select(); 
     return false; 
    } 
} 
</script> 
</body> 
</html> 
+1

很難說這段代碼應該做什麼 - 看起來你試圖讓'a'包含多於一個字符而'b'包含大於'a'中的內容的東西。你對於哪一種更大也不是很確切。 'a'=='aa'和'b'='ab'通過測試 – meouw 2010-02-09 06:33:41

+0

避免調用焦點() – Francisco 2010-02-09 07:09:34

回答

1

這適用於IE。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 

<head> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-type" /> 
</head> 

<body> 
    <input id="a" name="a" type="text" value="" /> 
    <input id="b" name="b" type="text" value="" /> 

    <script charset="utf-8" type="text/javascript"> 
var bInBlurA = false; 
var a = document.getElementById("a"); 
a.onblur = function(){ 
    if (bInBlurB) return; 
    if(a.value.length === 1){ 
     bInBlurA = true; 
     alert("aaa2"); 
     a.focus(); 
     a.select(); 
    } 
} 

var bInBlurB = false; 
var b = document.getElementById("b"); 
b.onblur = function(){ 
    if (bInBlurA) return; 
    if(b.value < a.value){ 
     bInBlurB = true; 
     alert("bbb2"); 
     b.focus(); 
     b.select(); 
    } 
} 
a.onfocus = function() 
{ 
    bInBlurA = false; 
} 
b.onfocus = function() 
{ 
    bInBlurB = false; 
} 
    </script> 

</body> 
</html> 
0

什麼ü意味着該行:

if(b.value < a.value){ 

如果你是比較長,這樣做:

if(b.value.length < a.value.length){ 

或者,如果您要檢查它們是否相等或不那麼:

if(b.value == a.value){ 

if(b.value != a.value){ 
+0

嗨Sarfraz,** if(b.value 2010-02-09 06:30:41

+0

你想要做什麼? – Sarfraz 2010-02-09 06:34:49

1

試試這個:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
</head> 
<body> 

<input type="text" name="a" id="a" value="" /> 
<input type="text" name="b" id="b" value="" /> 

<script type="text/javascript" charset="utf-8"> 
var a = document.getElementById("a"); 
a.onblur = function() { 
    a.validCheck = false; 
    if(a.value.length === 1){ 
     alert("aaa"); 
     a.focus(); 
     a.select(); 
     return false; 
    } 
    a.validCheck = true; 
} 

var b = document.getElementById("b"); 
b.onblur = function() { 
    if (!a.validCheck) return true; 
    if(b.value < a.value){ 
     alert("bbb"); 
     b.focus(); 
     b.select(); 
     return false; 
    } 
} 
</script> 
</body> 
</html> 

另外,我沒有在Firefox任何環路問題雖然按預期不表現。我假設這只是IE瀏覽器。

相關問題