JavaScript and JQuery 1.8.3 решение проблемы с функцией attr() на примере генератора пароля
Предисловие
Совсем недавно решил написать генератор пароля с возможностью просмотра генерированного пароля под звездочками. Для работы выбрал JQuery 1.8.3 и нативный JavaScript. При написании самого скрипта столкнулся с проблемой в JQuery 1.8.3 с функцией attr().Вот сама проблема
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
...
<script type="text/javascript">
$('.showPassword').click(function(){
var inputPsw = $('#password');
if (inputPsw.attr('type') == 'password'){
inputPsw.attr('type', 'text');
} else {
inputPsw.attr('type', 'password');
}
});
</script>
...
<input type="password" name="password" id="password" />
<a href="#" class="showPassword">Показать /a>
Вид в консоли:… type property can't be changed
Проблема в том, что в JQuery 1.8.3 есть небольшой БАГ, функция attr() не работает по замене свойства атрибута, т.к. защита браузеров блокируют ее. В версии JQuery 1.9.0 она исправлена.
Решение
Нашел такое вот решение на нативном JavaScript с помощью функции .setAttribute(name, value) — устанавливаемый атрибут.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
...
<script type="text/javascript">
$('.showPassword').click(function(){
var inputPsw = $('#password');
if (inputPsw.attr('type') == 'password') {
document.getElementById('password').setAttribute('type', 'text');
} else {
document.getElementById('password').setAttribute('type', 'password');
}
});
</script>
...
<input type="password" name="password" id="password" />
<a href="#" class="showPassword">Показать /a>
Сам скрипт генерации пароля с возможностью просмотра генерированного пароля под звездочками
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
...
<script type="text/javascript">
$(document).ready(function() {
//Скрипт генерации паролей
function str_rand() {
var result = '';
var words = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
var max_position = words.length - 1;
for( i = 0; i < 10; ++i ) {
position = Math.floor ( Math.random() * max_position );
result = result + words.substring(position, position + 1);
}
return result;
}
$('.showPassword').click(function(){
var inputPsw = $('#password');
if (inputPsw.attr('type') == 'password') {
document.getElementById('password').setAttribute('type', 'text');
} else {
document.getElementById('password').setAttribute('type', 'password');
}
});
$('.generatePassword').click(function() {
document.getElementById('password').setAttribute('type', 'text');
$('#password').attr('value', str_rand());
});
});
</script>
....
<input type="password" name="password" id="password" />
<a href="#" class="showPassword">Показать /a>
<a href="#" class="generatePassword">Сегенерировать /a>
Помощь сайту
ЮMoney:
4100 1180 7209 833
Карта Сбербанк:
2202 2080 6183 7127
Методы массивов в JavaScript: Исчерпывающий гид для разработчиков
Чистый код на JavaScript, 5 рекомендаций которые улучшат Ваш код.
Обработка ошибок в JavaScript. 10 примеров использования конструкции try...catch
Семь необходимых операторов RxJS
Зачем нам нужен TypeScript?
Как исправить ошибку «RangeError: Invalid time value» при вызове метода toISOString даты JavaScript?
Повышение уровня мастерства в JavaScript ES6
Введение в прототипы JavaScript
Сравнение методов require() и import() в JavaScript
Javascript array шпаргалка
Вырезаем изображение с помощью jQuery и PHP
Каррирование в JavaScript
Использование HTML5-элемента audio в JavaScript
Склонение окончаний в словах на Javascript
JavaScript - отслеживание изменения ориентации на мобильных устройствах
Четыре способа плавного скролла до элемента на JavaScript
Разрешаем только ввод цифр в поле input
Вывод последнего дня текущего месяца на Javascript
Понимание синхронного и асинхронного JavaScript с Async/Await
Youtube несколько видео на странице и стоп проигрывания предыдущего видео.
Семь важных функций JavaScript
Что такое ECMAScript и чем это отличается от JavaScript
Контекст выполнения функции в JavaScript
Область видимости в JavaScript
Замыкания в JavaScript
This в JavaScript
Объекты в JavaScript
Определение платформы устройства на javascript
Управление версиями Node.js с помощью nvm в Windows
Три способа понять промисы
Выделяем текущий пункт меню отдельным стилем на jQuery
Восемь типов данных и typeof
Собственные социальные share-кнопки
Как проверить с помощью jQuery и Javascript состояние checkbox
Велосипеды на Javascript и jQuery
Видео самоучитель jQuery от Envato
AJAX и JavaScript. Загрузка контента без перезагрузки страницы
Плавная кнопка "Наверх" на jQuery
Как отключить ввод текста по переключателю disabled
Как избежать повторной загрузки контента Jquery + Ajax + JSON
JavaScript and JQuery 1.8.3 решение проблемы с функцией attr() на примере генератора пароля
Возможно, вам будет интересно
Выделяем текущий пункт меню отдельным стилем на jQuery
Допустим нужно выделить текущий пункт меню отдельным стилем. Иногда, это сделать просто невозможно (в случае Ajax) или сложно из-за структуры меню и тут нам на помощь приходит JavaScript, а точнее jQuery
Как избежать повторной загрузки контента Jquery + Ajax + JSON
Как избежать повторной загрузки контента Jquery + Ajax + JSON. Для работы Front - End'а доступны были по ТЗ только таковы инструменты Java Script, JQuery, Ajax, JSON и конечно же HTML + CSS.
Использование HTML5-элемента audio в JavaScript
Благодаря тегу audio появившемуся в HTML5, можно очень просто добавлять звук на сайт. В javascript работать со звуком позволяет соответствующий класс Audio, а проверить поддержку формата звукового файла в браузере - метод canPlayType
Замыкания в JavaScript
Замыкание — это функция, объявленная внутри другой функции и имеющая доступ к переменным внешней (вмещающей) функции. Простыми словами замыкание — это функция, описанная внутри другой функции.