Javascript 函数在我的代码中不起作用
我的问题是,Javascript 函数在我的代码中不起作用,javascript,Javascript,我的问题是,text3在我的代码中没有定义: t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 以下是我的全部代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <p><input placeholder="numb
text3
在我的代码中没有定义:
t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>";
以下是我的全部代码:
<!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>
$('#x').keyup(函数(e){
var i;
var text2='';
var t=“”;
var x=document.getElementById(“x”).value;
对于(i=1;i看起来像$('#x')。keyup()
在$('#pass')之前被调用。keyup()
text3
在代码中没有设置为变量,因此它总是未定义。您需要在两个函数之前设置它
注意:我还将东西放在jqueryready函数中
出于某种原因,我被否决了,但我测试了这个,它是有效的
<!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>
$(函数(){
//首先在这里设置text3
var text3=“”;
$('#x').keyup(函数(e){
var i;
var text2='';
var t=“”;
var x=document.getElementById(“x”).value;
对于(i=1;i您的调用$('#x')。keyup(函数(e){
正在创建第一个事件侦听器,因此在keyup上您将始终以text3结束,因为$('#pass')。keyup(函数(e){
将始终稍后触发
编辑:
您的第二个keyup处理程序将永远无法工作,因为它只会获取一次#pass
元素(在文档解析期间)。您需要创建一些延迟的侦听器来修复它。
//无论如何,这不会解决您的text3未定义的问题
您需要做的是在两个.keyup
处理程序之前首先定义它
注意:
但请避免设置全局变量;)
把所有的事情都搞定
最后但并非最不重要的一点不要创建具有相同ID的多个元素这是一个主要错误。看,即使在修复代码以使其工作后,它也没有什么意义。使用roryok,只有当您输入的值是一个数字时,它才会工作,并且这样做只会为您输入的数字生成段落元素。您可以输入任意数量的数字(在浏览器崩溃之前),它将始终返回为“弱”
如果你想要的是一个简单的密码强度表,除非你能解释你试图通过强迫它坚持数字来实现更多的逻辑,否则我会转储大部分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;
}
这将在每次输入字符时验证整个输入,用户可以在字符“强”后提交该字符
这是我的JSFIDLE:函数是按照用户在字段中键入的顺序调用的,而不是按照它们定义的顺序调用的。对不起,我的错,但是当您从未引入text3
变量时,您希望如何在该变量中包含某些内容?我缺少什么?为什么人们对我投反对票?因为您错了。该变量是set在$(“#pass”).keyup()处理程序中。“它总是未定义的”-不正确。欢迎来到JS全局变量的丑陋世界。为什么不阅读其他答案?这不是你获得否决票的第一步吗?这里有机会学习。@roryok你的代码是正确的,但你的解释有误导性。(i=1;i@stealthyninja是的,第一个输入只与integerI一起工作我已经更改了它,但问题仍然存在
$('#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;
}