2016-02-16 3 views
0

У меня есть следующий код:Uncaught TypeError: obj.attr не является функцией JS

<input type="text" name="email" id="email" class="required-input" value="[email protected]"> 
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

Вы знаете происхождение этой ошибки? Неверная функция параметра подтверждена?

Пожалуйста, помогите мне решить эту проблему?

Заранее благодарен!

ответ

0

this является ссылкой на DOMElement, который вы пытаетесь вызвать методы jQuery, - следовательно, ошибка. Вам нужно передать объект jQuery вместо этого метода. Попробуйте это:

validate($(this)); 
+0

__Too quick__;) – Rayon

1

Как obj является родным объектом DOM, вы получаете сообщение об ошибке. Преобразуйте его в объект jQuery

$(obj).attr("id") 

ИЛИ, лучше передать объект jQuery для проверки функции.

validate($(this)); 
Смежные вопросы