#javascript #jquery
#javascript #jquery
Вопрос:
Я пытаюсь включить кнопку отправки, в форме есть 3 поля, значение 1-го поля фиксировано, а добавление 2-го поля и 3-го поля сохраняется в 4-м поле. поле. Итак, что мне нужно, так это сравнить с 1-м числом и 3-м 4-м числом (добавление 2-го и 3-го), и если условие выполнено, то оно должно включить кнопку отправки, иначе кнопка должна быть отключена. Я проделал некоторую работу и не смог понять, чего мне не хватает. Пожалуйста, помогите мне в том же отношении.
Я добавил код JSfiddle, над которым я работаю:
let $form = $('form');
let $first1 = $('#first1');
let $total1 = $('#total1');
let $total2 = $('#total2');
let $answer = $('#answer');
let $submitButton = $(':submit');
$form.on('submit', function(event) {
let val1 = Number($first1.val());
let val2 = Number($answer.val());
if (val1 < val2) { // If condition is NOT met.
event.preventDefault(); // Default submit from happening.
return false; // Stop function.
}
});
$form.on('input', function(event) {
let val1 = Number($first1.val());
let val2 = Number($answer.val());
console.log(val1, val2)
let isDisabled = val1 < val2; // Will return true or false.
$submitButton.prop('disabled', isDisabled);
});
$form.on('input', function(event) {
let val1 = Number($total1.val());
let val2 = Number($total2.val());
console.log(val1, val2)
let number = parseInt($('#total1').val()) parseInt($('#total2').val());
$('#answer').val(number);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="order.php">
<label for="first1">Fixed Number</label>
<input type="number" id="first1" value="10" />
<br>
<label for="total1">First Number</label>
<input type="number" id="total1" class="change"/>
<br>
<label for="total2">Second Number</label>
<input type="number" id="total2" class="change"/>
<br>
Answer = <input type="number" id="answer" name="answer" value=""/>
<br>
<input type="submit" value="submit" disabled title="Not Relevant">
</form>
Комментарии:
1. Будьте осторожны с порядком ваших обратных вызовов, вы сравниваете, затем добавляете, поэтому вы всегда сравниваете более старую версию. Также не нужно выполнять обратные вызовы, просто поместите весь код в один обратный вызов (после замены порядка)
Ответ №1:
Вы можете еще больше упростить свою функцию, объединив два input
прослушивателя событий и поместив их в один. И прослушиватель submit
событий тоже не нужен.
val1
и уже являются числами причиной того, что конструктор переносит функцию. val2
Number()
$total1.val()
Он делает то же самое, parseInt
что и .
Добавьте val1
val2
и сохраните этот результат в новой вызываемой переменной total
. Затем проверьте, total
ниже или выше firstVal
(фиксированное значение) и отключите или включите кнопку отправки.
Добавьте readonly
атрибут к входным данным, которые вы не хотите изменять пользователем.
let $form = $('form');
let $first1 = $('#first1');
let $total1 = $('#total1');
let $total2 = $('#total2');
let $answer = $('#answer');
let $submitButton = $(':submit');
$form.on('input', function(event) { // This function gets called every time you change the value in one of the inputs
let firstVal = Number($first1.val()); // Get fixed number
let val1 = Number($total1.val()); // Get 2nd field number
let val2 = Number($total2.val()); // Get 3rd field number
let total = val1 val2; // Add 2nd and 3rd field
let isDisabled = total < firstVal; // If total is lower than fixed number, then is true, otherwise is false.
$submitButton.prop('disabled', isDisabled); // Disable based on if isDisabled is true or false
$answer.val(total); // Show the total
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="order.php">
<label for="first1">Fixed Number</label>
<input type="number" id="first1" value="10" readonly/>
<br>
<label for="total1">First Number</label>
<input type="number" id="total1" class="change"/>
<br>
<label for="total2">Second Number</label>
<input type="number" id="total2" class="change"/>
<br>
<label for="answer">Answer</label>
<input type="number" id="answer" name="answer" value="" readonly/>
<br>
<input type="submit" value="submit" disabled title="Not Relevant">
</form>