Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оптимизировать инпут-счетчик (https://javascript.ru/forum/misc/60509-optimizirovat-input-schetchik.html)

Павел Турченко 04.01.2016 13:53

Оптимизировать инпут-счетчик
 
Добрый день, на старнице есть инпут счетчик для интернет магазина (укажите количество товаров + и -)

HTML:
<div class="input-group spinner">
	<input type="text" class="form-control" value="1">
	<div class="input-group-btn-vertical">
		<button class="btn btn-default" type="button">+</button>
		<button class="btn btn-default" type="button">&ndash;</button>
	</div>
</div>

Его я реализовал вот таким Js:
$(document).ready(function ($) {
  $('.spinner .btn:first-of-type').on('click', function() {
    $('.spinner input').val( parseInt($('.spinner input').val(), 10) + 1);
  });
  $('.spinner .btn:last-of-type').on('click', function() {
    $('.spinner input').val( parseInt($('.spinner input').val(), 10) - 1);
  });
})


Но проблема в том, что этих счетчиков до 10-20 штук на странице, а когда кликаешь, то он изменяет значения во всех инпутах на странице, как-то можно сделать, что бы изменял, только в том инпуте, на котором клик происходит.(и желателно не через id, то можно с ума будет сойти)
Заранее спасибо!

laimas 04.01.2016 14:24

Делегируйте обработку родителю кнопок input-group-btn-vertical, а их индекс в наборе будет определять операцию +/-. Поле ввода легко найти у родителя, хотя для input-group-btn-vertical, это и проще будет - .prev().

Павел Турченко 04.01.2016 14:44

laimas,
мощно задвинул.... я даже ничего не понял, можно как-то попроще)

рони 04.01.2016 14:52

Павел Турченко,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
 $(function() {
    $(".spinner").each(function(c, b) {
        $(b).on("click", ".btn-default", function() {
            var a = $(".form-control", b)[0];
            $(".btn-default", b).index(this) ? a.value-- : a.value++;
            0 > a.value && (a.value = 0)
        })
    })
});
  </script>
</head>

<body>
<div class="input-group spinner">
	<input type="text" class="form-control" value="1">
	<div class="input-group-btn-vertical">
		<button class="btn btn-default" type="button">+</button>
		<button class="btn btn-default" type="button">&ndash;</button>
	</div>
</div>
<div class="input-group spinner">
	<input type="text" class="form-control" value="1">
	<div class="input-group-btn-vertical">
		<button class="btn btn-default" type="button">+</button>
		<button class="btn btn-default" type="button">&ndash;</button>
	</div>
</div>

</body>

</html>

Павел Турченко 04.01.2016 15:13

рони,
большое спасибо! я бы поставил + к карме, но не пускает программа сайта, говорит, что бы я плюсанул кому-то другому....


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