Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение значения input[number] отдельными кнопками (https://javascript.ru/forum/misc/66962-izmenenie-znacheniya-input%5Bnumber%5D-otdelnymi-knopkami.html)

Greendumb 20.01.2017 12:00

Изменение значения input[number] отдельными кнопками
 
Здравствуйте!
Сразу прошу прощения за возможно детский вопрос, и по причине невладения темой попробую объяснить своими словами:

Имеется числовое поле ввода
Код:

<input type="number" min="1" class="uk-form-small" name="quantity" value="1">
Для изменения значения используются стандартные "стрелки" которые появляются при наведении на поле. НО этих стрелок нет, при просмотре страницы на планшете или телефоне, то есть пользователь не может изменить количество в поле.
Появилась идея сделать внешние кнопки изменения количества. Перелопатил кучу сайтов, нашел единственный подходящий для себя вариант:
Код:

<button onclick="document.getElementById('num1').value=parseInt(document.getElementById('num1').value)-1">-</button>
<input id="num1" type="number" min="1" class="uk-form-small" name="quantity" value="1">
<button id="sendButton" onclick="document.getElementById('num1').value=parseInt(document.getElementById('num1').value)+1">+</button>

Теперь значения в поле изменяются при нажатии на соответствующую кнопку, НО не происходит пересчета суммы, как это происходит при изменении количества стандартными стрелками.
Я так понимаю, что не хватает какого-то события типа Submit для отправки формы при нажатии на кнопку. Но как это реализовать я, к сожалению, не понимаю.
Заранее благодарен за помощь!
п.с. Возможно есть другие варианты реализации этой задачи? Буду рад любой помощи.

Dilettante_Pro 20.01.2017 12:08

Greendumb,
Цитата:

Сообщение от Greendumb
НО не происходит пересчета суммы,

Какой такой суммы? Вы пишете про один-единственный input

Стандартные стрелочки обеспечивают только изменение значения в input.
Дальнейшее использование этого значения - через обработчики событий.

Greendumb 20.01.2017 12:23

Возможно не совсем понятно написал:
Имеется таблица, в которой есть "Цена", "Количество" (т.е. наш input) и "Сумма". Соответственно, при изменении количества должна изменятся сумма. В стандартном случае так и происходит, при чем количество можно менять как стрелками в самом поле, так и ввести свое значение и по нажатию enter, меняется сумма.
В моем случае с отдельными кнопками, количество в самом поле меняется, но не хватает, как я понимаю какого-то события, "аналога" нажатия enter если можно так выразиться

Dilettante_Pro 20.01.2017 12:33

Greendumb,

Тогда у вас должен быть скрипт, в котором выполняются эти действия.
Ищите, в каком обработчике событий они выполняются.
В коде работы с кнопками можно будет добавить генерацию этого события

Greendumb 20.01.2017 13:03

Нашел такой код, есть тут что-нибудь полезное?
a('.zoocart-cart [name*="quantity"]',b.element).on("keyup",function(){var b=a(this).val();(isNaN(parseFloat(b))||!isFinite(b)||0>=b)&&a(this).val(1)}).on("change",function(){a(this).closest("tr").find(".price-total").zlux("spin",{affix:"replace"}),b.validateQuantities()})

Dilettante_Pro 20.01.2017 14:26

Greendumb,
Попробуйте в конец скриптов работы кнопок добавить генератор
$("#num1").keyup(); или $("#num1").change();

Кстати, там у вас вроде используется jQuery, поэтому вместо
document.getElementById('num1').value
можно писать
$('#num1').val()

Greendumb 20.01.2017 15:08

Неудача.
В первом случае
Код:

<button onClick="$('num1').val()=parseInt($('num1').val())+1;$('#num1').keyup();">+</button>
вообще не работает
TypeError: $(...).val is not a function


Во втором случае
Код:

<button onClick="document.getElementById('num1').value=parseInt(document.getElementById('num1').value)+1;document.getElementById('num1').keyup();">+</button>
не признает функцию
TypeError: document.getElementById(...).keyup is not a function

то же самое и с change()

Dilettante_Pro 20.01.2017 17:39

Greendumb,
Цитата:

Сообщение от Greendumb
Неудача.
В первом случае
Код:
<button onClick="$('num1').val()=parseInt($('num1').val()) +1;$('#num1').keyup();">+</button>
вообще не работает
TypeError: $(...).val is not a function

Вместо
$('num1').val()=parseInt($('num1').val()) +1;
попробуйте
$('#num1').val(parseInt($('#num1').val()) +1);

Dilettante_Pro 20.01.2017 17:56

Маленький пример
<input type="number" id="num1" min="1" class="uk-form-small" name="quantity" value="1">
<button onclick="$('#num1').val( +$('#num1').val() +1);$('#num1').keyup();">+</button>
<button onclick="$('#num1').val((+$('#num1').val() <= $('#num1').prop('min')) ? 1 : +($('#num1').val()) - 1);$('#num1').keyup();">-</button>
<div id="res"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
  $('#num1').on('keyup', function() {
       $("#res").text($(this).val());
   })
</script>

Greendumb 20.01.2017 18:13

Большое спасибо за помощь!
<button onClick="jQuery('#num1').val(parseInt(jQuery('#num1').val())+1);jQuery('#num1').change();">+</button>


Пришлось заменить & на jQuery и с change() заработало!

Но конечно не без нюансов, теперь могут получатся минусовые значения. Хотя в input стоит min=1 и вылазит предупреждение, но сумма считается минусовая.


Часовой пояс GMT +3, время: 03:37.