У меня есть 3 поля ввода, подобные этому
<input type="text" id="from-price" name="from-price"/>
<input type="text" id="to-price" name="to-price"/>
<input type="text" id="price" name="price"/>
и я хочу, чтобы, когда значения, введенные во всех полях, отобразится кнопка So, для этого у меня есть мой код, подобный этому
var val1 = jQuery('#from-price').val().length;
var val2 = jQuery('#to-price').val().length;
var val3 = jQuery('#price').val().length;
if (val1 && val2 && val3 < 1 ) {
jQuery('#add-fields').attr("disabled", false);
}
Но это не работает.
Обновление Каждый раз, когда я получаю длину 0, почему? Даже после ввода текста?
var elems = $('#from-price, #to-price, #price');
elems.on('keyup', function() {
var hasValue = elems.filter(function() {
return this.value.length
}).length != elems.length;
$('#add-fields').prop("disabled", hasValue);
});
var $i = $('input.prices').on('change', function(){
var b = $i.filter(function() {
return $.trim(this.value).length > 0;
}).length !== $i.length;
$('#add-fields').prop("disabled", b);
});
Используйте.prop(), чтобы установить отключенное состояние
jQuery(function ($) {
var $from = $('#from-price'),
$to = $('#to-price'),
$price = $('#price'),
$add = $('#add-fields');
$from.add($to).add($price).change(function () {
$add.prop('disabled', !($.trim($from.val()).length && $.trim($to.val()).length && $.trim($price.val()).length))
});
})
Демо: скрипка
jQuery(function(e){var t=e("#from-price"),n=e("#to-price"),r=e("#price"),i=e("#add-fields");t.add(n).add(r).change(function(){i.prop("disabled",!(e.trim(t.val()).length&&e.trim(n.val()).length&&e.trim(r.val()).length))})})
Замените условие if следующим:
if (val1 > 0 && val2 > 0 && val3 > 0 ) {
jQuery('#add-fields').attr("disabled", false);
}
val > 0
или аналогичным, поскольку он хочет включить, только если все поля заполнены.
Я поставил исправление для этой проблемы как часть этой скрипки. Скажите мне, если это сработает для вас.
Как часть скрипта, код HTML выглядит так:
<input type="text" id="from-price" name="from-price"/>
<input type="text" id="to-price" name="to-price"/>
<input type="text" id="price" name="price"/>
<button id="theButton">Submit</button>
И код jQuery выглядит так:
var items = $("#from-price,#to-price,#price");
var button = $("#theButton").hide();
items.change(function(){
var availableDataSize http://jsfiddle.net/3STqm/= items.map(function(){
return $.trim($(this).val()) != "" ? true : null;
}).length;
availableDataSize == items.length ? button.show() : button.hide();
});
Он просто пытается найти доступный объем данных и, если он равен количеству полей, затем покажите, что кнопка скрывает его.
var val1 = jQuery('#from-price').val().length;
var val2 = jQuery('#to-price').val().length;
var val3 = jQuery('#price').val().length;
if (val1 > 0 && val2 > 0 && val3 > 0 ) {
jQuery('#add-fields').attr("disabled", "false");
}
Это должно сработать.
Похоже, вы проверяете значения только при загрузке страницы. Вот почему он всегда показывает 0, если вы заранее не заполните форму.
Чтобы сделать проверку динамической, введите код в функцию и оберните его внутри функции изменения:
$('input').change(my_function);
Конечно, было бы здорово добавить класс к тем трем входам, которые у вас есть, а затем использовать селектор классов (если на странице больше входных данных): $('input.my_class')...
Кроме того, предложение if может быть примерно таким:
if (val1 > 0 && val2 > 0 && val3 > 0) {
jQuery('#add-fields').attr("disabled", false);
}
else {
jQuery('#add-fields').attr("disabled", true);
}
Я предполагаю, что вы хотите включить кнопку, если все поля заполнены, если это так, то ваше условие if
неверно. Он должен быть больше 0
что указывает на то, что поле не пустое. Обратите внимание:
if (val1 > 0 && val2 > 0 && val3 > 0 ) {
jQuery('#add-fields').attr("disabled", false);
}
Обновленный ответ: если вы хотите проверить мгновенно, тогда вам нужно прикрепить обработчик событий. Попробуйте следующее:
$("input").on("keyup",function(){
var val1 = jQuery('#from-price').val().length;
var val2 = jQuery('#to-price').val().length;
var val3 = jQuery('#price').val().length;
if (val1 >0 && val2 > 0 && val3 > 0 ) {
jQuery('#add-fields').attr("disabled", false);
}
});
$(document).on('change','#from-price, #to-price, #price',function(){
var val1 = jQuery('#from-price').val();
var val2 = jQuery('#to-price').val();
var val3 = jQuery('#price').val();
if (val1!="" && val2!="" && val3!="" ) {
jQuery('#add-fields').attr("disabled", false);
}else{
jQuery('#add-fields').attr("disabled", true);
}
});
console.log(jQuery('#from-price').val().length)
в firefox / chrome, чтобы увидеть, какие значения они выводят