函数在我的代码中不起作用

时间:2014-10-03 20:48:45

标签: javascript

我的问题是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>

有什么问题? 请帮忙

4 个答案:

答案 0 :(得分:2)

$('#x').keyup()

之前调查似$('#pass').keyup()

答案 1 :(得分:0)

您的电话$('#x').keyup(function (e) {正在创建第一个事件监听器,因此在密钥制中,您将始终使用text3 is undefined,因为$('#pass').keyup(function (e) {将始终触发。 < / p>

修改

你的第二个keyup处理程序永远不会工作,因为它只会抓取#pass元素一次(在文档解析期间)。您需要创建一些deferred侦听器来修复它。 //无论如何,这不会解决您的text3 is undefined问题。

您需要做的是首先在两个.keyup处理程序之前定义它。

注意:

但是请尽量避免设置全局变量;) 将所有东西放入封闭物或其他东西。

最后但并非最不重要不要创建许多具有相同ID的元素,这是一个主要错误。

答案 2 :(得分:0)

看,即使在修复代码以使其工作之后,它也没什么意义。使用roryok的jsFiddle,只有当您输入的值是一个数字时才会起作用,这样做只会产生您输入的数字的段落元素。您可以输入任意数量的数字(在浏览器崩溃之前),它总是返回“弱”。

如果它是一个简单的密码强度计,除非你可以通过强制它坚持数字来解释你试图获得更多的逻辑,我会抛弃大部分JavaScript代码并将其减少为< / p>

$('#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/

答案 3 :(得分:-1)

text3未在代码中设置为变量,因此始终未定义。您需要在两个函数之前设置它。

注意:我还把东西放在jQuery就绪函数中。

出于某种原因,我被低估了,但我测试了它并且它有效

<!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/