Показать сообщение отдельно
  #2 (permalink)  
Старый 02.09.2019, 12:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

live, этот метод из очень древней JQ, у вас что еще допотопная подключается?

if (jQuery(this).hasClass('nc-minus')) .... input.val(value).change(); не понятно что тут. Если вы подменяете управление полем (его кнопки), то есть простой способ без всяких if(какой класс, какая кнопка). Достаточно кнопкам указать значения равные 1, для минуса отрицательное. А затем к текущему значению прибавлять эти значения кнопок, думаю не надо объяснять правила арифметики и что будет.

input[0].valueAsNumber += parseInt(val), где val значение нажатой кнопки.

Зачем .change()?

PS. На свежую голову )

jQuery(document).live, это слишком древнее, подключайте новые версии и используйте метод .on(). Но делегировать обработчик (если есть необходимость) очень далекому предку, это не лучший выбор, делегировать нужно ближайшему родителю гарантированно существующему на странице, в примере это элемент с id "as".

Если изменять значение поля типа number программно, не его кнопками, то проверки крайних его значений с его стороны не будет. Кроме того, в ручном режиме ввода в это поле можно ввести и не цифровые символы. В общем это надо проверять. С учетом новой версии JQ и для примера кнопки, это кнопки, а не div. А для div можно использовать data атрибуты:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<div id="as">
    <button value="-1">-</button> <input type="number" value="1" min="1" max="5" /> <button value="1">+</button><br />
    <button value="-1">-</button> <input type="number" value="1" min="1" max="5" /> <button value="1">+</button>
</div>
<script>
$('#as').on('click', 'button', function() {
    var bt = $(this), n = +bt.val(), num = (~n ? bt.prev() : bt.next())[0]; 
    if(!~n && num.value > num.min || ~n && num.value < num.max) num.valueAsNumber += v //к сожалению ослик не понимает valueAsNumber и нужно num.value = +num.value + v
}).on('input', '[type=number]', function() {
    this.value = this.value.replace(/\D/, ''); 
    if(!this.value) this.value = this.min //здесь тоже нужно проверять крайние значения и устанавливать соответствия 
});
</script>


".change() - на случай, если на изменение этого инпута..." - ну так это проверить можно, в Хроме для есть плагин (вот как дразнится не помню), а в отладчике FF это встроено, все назначенные элементу обработчики событий можно посмотреть в инспекторе кода.

Последний раз редактировалось laimas, 03.09.2019 в 04:58.
Ответить с цитированием