<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>
₽ / шт.
</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">
2 ₽ / шт.
</label>
<label><span>Итого:</span><var id="total">0</var> ₽
</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
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |