Отключить кнопку отправки, пока поля ввода не будут заполнены
Интересно, может ли кто-нибудь указать мне в правильном направлении со следующим куском jquery. Я хочу отключить кнопку отправки, пока мои поля ввода не будут заполнены.
Я придумал этот
$(document).ready(function (){
if ($('#inputName, #inputEmail, #inputTel').val().length > 0) {
$("input[type=submit]").attr("disabled", "false");
}
else {
$("input[type=submit]").attr("disabled", "true");
}
});
но кнопка постоянно отключена, даже после заполнения всех полей ввода текста
Продолжая учиться JQuery и не использовал его какое-то время. Поэтому любые указатели оценили
Спасибо
Ответы
Ответ 1
Связывание вашего события только с готовым документом.
Таким образом, нет никакого слушателя, когда вы что-то меняете.
Сделайте это вместо:
$(document).ready(function (){
validate();
$('#inputName, #inputEmail, #inputTel').change(validate);
});
function validate(){
if ($('#inputName').val().length > 0 &&
$('#inputEmail').val().length > 0 &&
$('#inputTel').val().length > 0) {
$("input[type=submit]").prop("disabled", false);
}
else {
$("input[type=submit]").prop("disabled", true);
}
}
Ответ 2
Ваш текущий код в порядке, но не отвечает на пользовательские события, в которых вы отключились.
$('#inputName, #inputEmail, #inputTel').keyup(function(){
if($(this).val().length > 0){
$("input[type=submit]").prop("disabled", false);
}else{
$("input[type=submit]").prop("disabled", true);
}
});
Изменить, это не сработает. потому что один из этих элементов заставит эту кнопку отправить, чтобы активироваться, независимо от других. Я буду исправлять на мгновение.
Изменить. Здесь черновой вариант исправления, возможно, он будет красивее, но определенно станет хорошей отправной точкой.
var toValidate = $('#inputName, #inputEmail, #inputTel'),
valid = false;
toValidate.keyup(function () {
if ($(this).val().length > 0) {
$(this).data('valid', true);
} else {
$(this).data('valid', false);
}
toValidate.each(function () {
if ($(this).data('valid') == true) {
valid = true;
} else {
valid = false;
}
});
if (valid === true) {
$('input[type=submit]').prop('disabled', false);
}else{
$('input[type=submit]').prop('disabled', true);
}
});
И вот ваш jsFiddle, иллюстрирующий этот метод
Ответ 3
измените свойство кнопки, а не атрибут... используйте prop()
вместо attr()
$(document).ready(function (){
if ($('#inputName, #inputEmail, #inputTel').val().length > 0) {
$("input[type=submit]").prop("disabled", false);
}
else {
$("input[type=submit]").prop("disabled", true);
}
});
и я предполагаю, что это не имеет смысла, поскольку у вас нет привязки к событию на нем.. это будет проверять только, имеет ли вход значение в документе. Уже или нет.. однако привязка события или нет, что зависит от вас. но по этой причине prop()
был введен в более поздней версии jquery...
обновляется
после просмотра комментариев ниже,
$(function(){
validate();
$('input[type="text"]').keyup(validate); //you can use your multiple id selector instead of the attribute selector that i am using
});
function validate() {
var inputvalue = $('input[type="text"]').filter(function (n) {
return this.value.length > 0;
})
if (inputvalue.length == $('input[type="text"]').length) {
$("input[type=submit]").prop("disabled", false);
} else {
$("input[type=submit]").prop("disabled", true);
}
}
это должно работать для любого количества входов с типом как текст (не нужно вообще изменять коды javascript/jquery)... здесь fiddle
Ответ 4
вам нужно снова запустить команду if, чтобы включить это, что можно сделать при событии change
ввода
function updateSubmit(){
if ($('#inputName').val().length+$('#inputEmail').val().length+$('#inputTel').val().length > 2) {
$("input[type=submit]").prop("disabled", false);
}
else {
$("input[type=submit]").prop("disabled", true);
}
}
$(document).ready(function (){
updateSubmit();
$('#inputName, #inputEmail, #inputTel').on('change',function(){
updateSubmit();
});
});
Ответ 5
Я пытался следовать этой теме, чтобы реализовать это с помощью специальной формы полосы.
Это мой код:
$(document).ready(function (){
validate();
$('#EMAIL, #FNAME, #LNAME, #card-element').change(validate);
});
function validate(){
if ($('#EMAIL').val().length > 0 &&
$('#FNAME').val().length > 0 &&
$('#LNAME').val().length > 0 &&
$('#card-element').hasClass('StripeElement--complete')
){
$("button[type=button]").prop("disabled", false);
}
else {
$("button[type=button]").prop("disabled", true);
}
}
Ответ 6
Этот код будет проверять типы ввода для текстового поля, электронной почты и флажка, отлично работает с моей стороны, а также, если поля ввода скрыты, будет проверять только видимые поля.
var register_disable = false;
jQuery("#SUBMIT_BUTTON-ID").prop('disabled', register_disable);
jQuery("input[type!='submit']").bind('keyup change', function () {
jQuery("input[type='text'], input[type='email']").not(':input:hidden').each(function () {
if (jQuery(this).val().trim() == "" || !$("input[type='checkbox']").is(':checked')) {
register_disable = true;
}
});
jQuery("#SUBMIT_BUTTON-ID").prop('disabled', register_disable);
register_disable = false;
});
Ответ 7
Используйте форму onsubmit. Хороший и чистый. Вам не нужно беспокоиться об изменениях и срабатывании событий нажатия клавиш. Не нужно беспокоиться о проблемах с клавиатурой и фокусом.
http://www.w3schools.com/jsref/event_form_onsubmit.asp
<form action="formpost.php" method="POST" onsubmit="return validateCreditCardForm()">
...
</form>
function validateCreditCardForm(){
var result = false;
if (($('#billing-cc-exp').val().length > 0) &&
($('#billing-cvv').val().length > 0) &&
($('#billing-cc-number').val().length > 0)) {
result = true;
}
return result;
}