#javascript #jquery #html #forms #flask
#javascript #jquery #HTML #формы #flask
Вопрос:
Я пытаюсь заставить мою форму не перезагружаться, если мои пароли 1 и 2 не совпадают, когда я нажимаю отправить. Что не так с моим кодом, прикрепляющим html и js.
<label for="password">Lösenord: </label>
<input type="password" class="form-control" id="password" name="password" placeholder="Lösenord" required>
<p>
</p>
<label for="password2">Upprepa Lösenord: </label>
<input type="password" class="form-control" id="password2" name="password2" placeholder="Lösenord" required>
<p>
</p>
$(document).ready( function() {
$("#submit").click( function() {
var password1 = $("#password");
var password2 = $("#password2");
alert(password2);
if (password1 /= password2) {
preventDefault();
}
});
});
ОБНОВЛЕНИЕ: Пробовал изменить на «!=» и passwor.val(), по-прежнему не работает..
Комментарии:
1. игнорируйте «функцию оповещения»
2.
password1 /= password2
? что вы пытаетесь сделать с разделением здесь ?3. Я думаю, у вас опечатка, «password1 /= password2» должно быть, если password1 != password2
4. @CodeManiac Я почти уверен, что они пытаются использовать «not =» там. Я думаю, что Haskell использует этот оператор.
Ответ №1:
Помимо проблем, на которые указал @Joshua Robles,
Добавьте пустой value
атрибут в свои поля ввода, например, так:
<input type="password" class="form-control" id="password" name="password" placeholder="Lösenord" value="" required>
Полный код и демо:
$("#submit").click( function(event) {
var password1 = $("#password").val();
var password2 = $("#password2").val();
if (password1 !== password2) {
alert("Passwords don't match")
event.preventDefault();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="password">Lösenord: </label>
<input type="password" class="form-control" id="password" name="password" placeholder="Lösenord" value="" required>
<p></p>
<label for="password2">Upprepa Lösenord: </label>
<input type="password" class="form-control" id="password2" name="password2" placeholder="Lösenord" value="" required>
<p></p>
<input type="submit" id="submit">
Ответ №2:
Если я правильно помню, вы получаете только ссылку на элемент DOM. Чтобы получить значение, вам нужно использовать .val()
Вы также выполняете разделение вместо сравнения. Ваше сравнение операторов if должно быть:
if (password1.val() !== password2.val()) {
Вам также необходимо передать объект event в прослушиватель кликов. Итак, в целом, это должно быть:
$("#submit").click( function(event) {
var password1 = $("#password").val();
var password2 = $("#password2").val();
if (password1 !== password2) {
event.preventDefault();
}
});
Комментарии:
1. Пробовал, увидел свою опечатку, все еще не работает. Должен ли я также изменить свои объявления var или они должны остаться прежними?
2. Да, не заметил. Есть ли открытая глобальная
preventDefault
функция в вашем коде? Возможно, вам потребуется иметьevent
параметр в вашей функции onClick и использоватьpreventDefault
функцию из этого объекта. Я обновлю свой ответ3. У меня нет функции onclick для кнопки отправки, она работает через мои маршруты. py и отправляет метод post. Я думаю, что Jquery доминирует в этом? Я новичок в jquery. Я думал, что preventDefault предотвращает метод post, который обычно выполняет submit.
4. Вы создаете прослушиватель событий нажатия на кнопку отправки. Я предлагаю вам ознакомиться с основами javascript и тем, как работает jquery, чтобы полностью понять, что вы пытаетесь сделать. Опять же, я не советую вам использовать jQuery, поскольку многие функции, которые они предоставляли, теперь уже доступны в современных браузерах. Я обновил свой ответ. Надеюсь, это поможет!
Ответ №3:
В вашем примере следует использовать часть привязки события click к preventDefault()
, компаратору simple logic !=
, поскольку он не зависит от типа объекта, и, наконец, предотвратить истинную проверку, если поля пусты
$("#submit").click( function(event) {
var password1 = $("#password").val().length>0 ? $("#password").val() : 'a';
var password2 = $("#password2").val().length>0 ? $("#password2").val() : 'b';
//prevent true if empty
if (password1 != password2) {
event.preventDefault();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<form id="form" action="">
<label for="password">Lösenord: </label>
<input type="password" class="form-control" id="password" name="password" placeholder="Lösenord" required>
<p>
</p>
<label for="password2">Upprepa Lösenord: </label>
<input type="password" class="form-control" id="password2" name="password2" placeholder="Lösenord" required>
<p>
<button id="submit">Ok</button>
</p>
</form>