2014-10-03 74 views
2

我的問題是,text3在我的代碼未定義在這裏:功能是不是在我的代碼工作

t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 

,但它是在這裏:

$('#pass').keyup(function (e) { 
    var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
    var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
    if (strong.test($(this).val())) { 
     text3 = "strong"; 
    } else if (normal.test($(this).val())) { 
     text3 = "normal"; 
    } else { 
     text3 = "weak"; 
    } 
    return true; 
}); 

這裏是我的所有代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
</head> 
<body> 
<p><input placeholder="number of tests" type="text" name="numbers" id="x"/></p> 
<div id="passdiv"></div> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 

    $('#x').keyup(function (e) { 

     var i; 
     var text2 = ''; 
     var t = ""; 
     var x = document.getElementById("x").value; 
     for (i = 1; i <= x; i++) { 
      text2 = '<p><input placeholder="test NO. ' + i + '" type="password" id="pass" /></p>'; 
      t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 
     } 
     document.getElementById("passdiv").innerHTML = t; 

     return true; 
    }); 

    $('#pass').keyup(function (e) { 
     var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
     var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
     if (strong.test($(this).val())) { 
      text3 = "strong"; 
     } else if (normal.test($(this).val())) { 
      text3 = "normal"; 
     } else { 
      text3 = "weak"; 
     } 
     return true; 
    }); 

</script> 
</body> 
</html> 

是什麼問題? 請幫助

+0

'爲(i = 1; I <= X,我++){' - 並沒有真正意義的我。你意識到這意味着如果'x'的值是一個整數,這隻會「工作」,對嗎? – stealthyninja 2014-10-03 21:09:40

+0

@stealthyninja是第一個輸入只能用整數 – 2014-10-04 03:00:36

+0

真的沒有人!? – 2014-11-25 15:45:05

回答

2

貌似$('#x').keyup()$('#pass').keyup()

+0

我改變了它,但問題仍然存在 – 2014-10-04 03:06:55

-1

text3未設置爲代碼中的變量被調用,因此它總是將是不確定的。你需要在你的兩個函數之前設置它。

注:我也把東西放入jQuery準備好的函數中。

出於某種原因,我正在downvoted,但我測試了這一點,它的工作原理

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
</head> 
<body> 
<p><input placeholder="number of tests" type="text" name="numbers" id="x"/></p> 
<div id="passdiv"></div> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 

$(function(){ 
    // set text3 in here first 
    var text3 = ""; 

    $('#x').keyup(function (e) { 

     var i; 
     var text2 = ''; 
     var t = ""; 
     var x = document.getElementById("x").value; 
     for (i = 1; i <= x; i++) { 
      text2 = '<p><input placeholder="test NO. ' + i + '" type="password" id="pass" /></p>'; 
      t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 
     } 
     document.getElementById("passdiv").innerHTML = t; 

     return true; 
    }); 

    $('#pass').keyup(function (e) { 
     var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
     var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
     if (strong.test($(this).val())) { 
      text3 = "strong"; 
     } else if (normal.test($(this).val())) { 
      text3 = "normal"; 
     } else { 
      text3 = "weak"; 
     } 
     return true; 
    }); 

}); 
</script> 
</body> 
</html> 

而且,這裏是它的工作 http://jsfiddle.net/gsuy4t27/

+0

我錯過了什麼?爲什麼人們低估我? – roryok 2014-10-03 20:53:33

+0

因爲你錯了。該變量在'$(「#pass」)。keyup()'處理程序中設置。 – Barmar 2014-10-03 20:54:03

+0

「它總是未定義」 - 不正確。歡迎來到JS全局變量的醜陋世界。 – 2014-10-03 20:54:07

0

您的通話$('#x').keyup(function (e) {小提琴是創建的第一個事件監聽器所以在keyup中,你總是最終以text3 is undefined結束,因爲$('#pass').keyup(function (e) {總是會在後面被觸發。

編輯:

你的第二個KEYUP處理程序將不會起作用,因爲它(文件解析過程中)搶#pass元素只有一次。你需要創建一些防禦監聽器來修復它。 //無論如何,這不會解決您的問題text3 is undefined問題。

您需要做的是在兩個.keyup處理程序之前先定義它。

注:

但請避免無論如何設置全局變量;) 把一切都變成關閉或東西。

最後但並非最不重要不要創建許多具有相同ID的元素這是一個主要的錯誤。

+0

函數按照用戶在字段中鍵入的順序調用,而不是按照它們定義的順序調用。 – Barmar 2014-10-03 20:53:03

+0

不好意思,但是如果你沒有介紹過它,你希望在'text3'變量中有什麼東西? – veritas 2014-10-03 20:55:37

0

看起來,即使修復代碼以使其起作用,它也沒有什麼意義。使用roryok的jsFiddle,只有當你輸入的值是一個數字時,它纔會起作用,並且這樣做只會產生輸入數字的段落元素。您可以輸入儘可能多的數字(在瀏覽器崩潰之前),它總是會返回「弱」。

如果它是一個簡單的密碼強度計,那麼除非您可以通過強制它堅持數字來解釋您試圖實現的邏輯,否則我會轉儲大部分JavaScript代碼並將其減少爲

$('#x').keyup(function (e) { 
    document.getElementById("passdiv").innerHTML = strength($(this).val()); 

    return true; 
}); 

function strength(val) {  
    var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
    var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
    if (strong.test(val)) { 
     t = "strong"; 
    } else if (normal.test(val)) { 
     t = "normal"; 
    } else { 
     t = "weak"; 
    } 
    return t; 
} 

這會在每次輸入字符時驗證整個輸入,然後用戶可以在「強」字後提交。

這裏是我的jsfiddle:http://jsfiddle.net/xqooj482/

+0

不是我想要的所有東西! – 2014-10-04 02:42:44