隐藏函数jquery不起作用

时间:2013-09-03 15:56:48

标签: javascript jquery

我有这个代码在函数valid_name不为true时显示错误,并在模糊时valid_name变为true时隐藏错误; 错误显示在最初隐藏的div中。 出现错误但它不会消失。

function valid_name() {
    if (($("#name").length > 5) && ($("#name").length < 20)) {
        return true;
    } else {
        return false;
    }
}

 $(document).ready(function() {
    $('#name').on('blur', function() {
        if (!valid_name())
            $("#name_erors").text("invalid name").show();
        if (valid_name())
            $("#name_erors").hide();

    });
});

4 个答案:

答案 0 :(得分:5)

我认为

$("#name").length

应该

$("#name").val().length

原因$('#name').length计算找到的元素,但要计算你需要使用的字符

$("#name").val().length

所以功能应该是

function valid_name() {
    if (($("#name").val().length > 5) && ($("#name").val().length < 20)) {
        return true;
    } else {
        return false;
    }
}

您也可以

function valid_name() {
    var value = $('#name').val(), len = value.length;
    return len > 5 && len < 40;
}

答案 1 :(得分:2)

使用jQuery选择时,返回的对象包含元素。在这种情况下,只有一个,所以length将始终为1.您可能想要选择值的长度。

那就是说,这是一个fully optimised Vanilla JS解决方案:

document.getElementById('name').onblur = function() {
    var notice = document.getElementById('name_errors');
    if( this.value.length > 5 && this.value.length < 20) notice.style.display = "none";
    else {
        notice.style.display = "block"; // or "inline", as applicable
        notice.innerHTML = "Invalid name length (must be between 6 and 19 characters)";
    }
};

此代码应放置在:

  • name元素
  • 之后的任何地方
  • 在具有defer属性
  • 的脚本块中
  • window.onload处理程序

答案 2 :(得分:1)

我认为你的函数总是返回false。尝试,

function valid_name() {
        if (($("#name").val().length > 5) && ($("#name").val().length < 20)) {
            return true;
        }
        else {
            return false;
        }
    }

 $(document).ready(function() {
            $('#name').on('blur', function() {
                if (!valid_name())
                    $("#name_erors").text("invalid name").show();
                if (valid_name())
                    $("#name_erors").hide();

            });
        });

.val()给出输入字段的值,您应该检查值的长度。

$('#name').length将返回带有id名称的元素的数量,肯定小于5。

答案 3 :(得分:1)

你将div id拼写为“name_erors”,这看起来像拼写错误。我会首先仔细检查html中的拼写。