Я хочу добавить кнопку показа пароля внутри поля ввода пароля. Я использую четкие формы для стилизации, поэтому я немного придерживаюсь лучших практик.
В настоящее время у меня есть отдельное поле флажка, в котором отображается пароль при проверке. Js здесь работает нормально. Я хотел бы изменить флажок de на значок глаза, который находится внутри поля ввода. Мне удалось добавить значок глаза в поле ввода через css background: url (path-to-icon).
Я не могу понять, как изменить значок на кнопку (1 ) и добавьте к нему мой js (2).
Моя форма:
class CustomSignupForm(SignupForm):
user_group = forms.ModelChoiceField(queryset=Group.objects.exclude(name='admin').exclude(name='personeel').exclude(name='onderhoud'),
widget=forms.RadioSelect(attrs={'placeholder': 'Soort klant:'}),
initial=('particulier'), label='Soort klant'
)
first_name = forms.CharField(max_length=30,
label='Voornaam',
widget=forms.TextInput(attrs={'placeholder': 'Voornaam'}),)
last_name = forms.CharField(max_length=30,
label='Achternaam',
widget=forms.TextInput(attrs={'placeholder': 'Achternaam'}),)
Моя HTML:
<div class="form-row">
<div class="form-group col-md-6 mb-0">
<a>{{ form.password1 | as_crispy_field}}</a>
</div>
<div class="form-group col-md-6 mb-0">
<a>{{ form.password2 | as_crispy_field}}</a>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12 mb-0">
<input class="ml-2" type="checkbox" onclick="ShowPassword()"> show password
</div>
</div>
Моя css:
#id_password1 {
background: url("http://127.0.0.1:8000/static/user/media/eye_icon.png") no-repeat;
background-size: 20px 20px;
background-position: right;
background-position-x: 97%;
}
#id_password2 {
background: url("http://127.0.0.1:8000/static/user/media/eye_icon.png") no-repeat;
background-size: 20px 20px;
background-position: right 10px;
background-position-x: 97%;
}
Мой js:
function ShowPassword() {
var x = document.getElementById("id_password");
if (x.type === "password") {
x.type = "text";
} else {
x.type = "password";
}
}
Есть ли у кого-нибудь идеи, как заставить эту работу работать?