2014-10-03 58 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