Манипулирование атрибутами HTML5: ванильный JS против jQuery

#javascript #jquery #html #input #attributes

#javascript #jquery #HTML #ввод #атрибуты

Вопрос:

Почему изменение значений атрибутов элементов в vanilla JS и jQuery иногда не работает одинаково? Один из сценариев — это эксперимент, который я создал, где всякий раз, когда нажимается кнопка «Показать пароль» type , значение атрибута поля пароля должно меняться на text когда оно есть password , и наоборот. Он успешно работал в vanilla JS, но не в jQuery. В jQuery значение атрибута изменяется на text , но когда я хочу изменить его обратно на password , это не сработает. Почему возникает такая проблема?

Ванильный JS

 document.querySelector('.show-password').onclick = function() {
    if(document.querySelector('#password').type == 'password') {
        document.querySelector('#password').type = 'text';
    } else {
        document.querySelector('#password').type = 'password';
    }
}
  

jQuery

 $('.show-password').click(function() {
    if($('#password').attr('type', 'password')) {
        $('#password').attr('type', 'text');
    } else {
        $('#password').attr('type', 'password');
    }
});
  

Комментарии:

1. Так и должно быть if($('#password').attr('type') == 'password') . Rubberduck — отладка вашего кода. Нет причин, по которым 7 строк кода должны завершиться ошибкой.

Ответ №1:

Потому if($('#password').attr('type', 'password')) что не спрашивает, является ли атрибут типа «паролем». Это установка type=password и возврат объекта jQuery в оператор if .

Когда .attr() используется только с одним параметром, он получает этот атрибут из выбранного элемента, поэтому вы можете сделать это с помощью $("#password").attr("type") == "password" .