Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <form>
    <label>
      <span>Цена:</span>
      <select id="price">
        <option value="0" disabled selected>-</option>
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="30">30</option>
      </select>
      &nbsp;₽ / шт.
    </label>
    <label>
      <span>Количество:</span>
      <input type="number" id="count" value="0">
    </label>
    <label>
      <span></span>
      <input type="range" id="range" min="0" max="100" value="0">
    </label>
    <label>
      <span>Доставка:</span>
      <input type="checkbox" id="shipping">
      &nbsp;2 ₽ / шт.
    </label>
    <label><span>Итого:</span><var id="total">0</var>&nbsp;
    </label>
    <button id="submit" disabled>Отправить</button>
  </form>
</body>
</html>
 
form {
  display: flex;
  flex-direction: column;
}
label {
  display: flex;
  justify-content: stretch;
  padding-bottom: 5px;
}
label > *:first-child {
  flex-basis: 7rem;
}
input[type="number"] {
  width: 3rem;
  text-align: center;
}
 
$('form').each((i, form) => {
  const $form = $(form);
  const $count = $form.find('input#count');
  const $range = $form.find('input#range');
  const $total = $form.find('var#total');
  const $submit = $form.find('button#submit');
  const data = {};
  let total = 0;
  
  $form
    .on('input change', ({target, target: {id, value, checked}}) => {
      switch (id) {
        case 'price': {
          if (value == data.price) return false;
          data.price = value;
          break;
        }
        case 'count':
        case 'range': {
          if (value == data.count) return false;
          let v = value;
          if (id == 'count') {
            if (v < 0) {
              $count.val(0);
              v = 0;
            } else if (v > 100) {
              $count.val(100);
              v = 100;
            }
            $range.val(v);
          } else {
            $count.val(v);
          }
          data.count = v;
          break;
        }
        case 'shipping': {
          if (value == data.shipping) return false;
          data.shipping = checked;
          break;
        }
      }
    
      total = data.price * data.count;
      if (data.shipping) total += 2 * data.count;
      if (isNaN(total)) total = 0;
      $total.text(total);
    
      $submit.prop('disabled', !total);
    
      return false;
    })
    .on('submit', e => {
      if (total) alert(total);
      return false;
    });
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
aves84pro
0viewers