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;
}