未捕获的TypeError:obj.attr不是函数JS

时间:2016-02-16 12:03:11

标签: javascript jquery html

我有以下代码:

<input type="text" name="email" id="email" class="required-input" value="test@yahoo.com">
function validate(obj) {
    const email_regex = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
    if (obj.attr("id") == "email") {
        regex = email_regex;
    }

    (!obj.val().match(regex) || obj.val().length == 0 || obj.val() == '') ? obj.removeClass('valid').addClass('invalid'): obj.removeClass('invalid').addClass('valid');
}

$('.required-input').each(function() {
    $(this).on('input keyup keypress blur change', function() {
         validate(this);   //EROR HERE
    });
});

错误如下Uncaught TypeError: obj.attr is not a function

您知道此错误的来源吗? 验证错误的参数功能?

请你能帮我解决这个问题吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

由于obj是本机DOM对象,因此您收到错误。将其转换为jQuery对象

$(obj).attr("id")

OR,更好地传递jQuery对象以验证函数。

validate($(this));

答案 1 :(得分:0)

this是对您试图调用jQuery方法的DOMElement的引用 - 因此是错误。您需要将jQuery对象传递给该方法。试试这个:

validate($(this));