, : JS <input />, ( , <input> . , , DOM, ( : ).
Given your problem (the values ββshould be unique and only swaps should be accessible), itβs easier to deal with it as a pure JS problem (and don't try to do everything in jQuery - although I agree with it in a large library, it is not necessarily the best tool for everything )
Here is my commented solution:
jQuery(document).ready(function($) {
var numbers = [1, 2, 3];
function setNumber(index, newVal) {
var prevIndex = numbers.indexOf(newVal);
if (prevIndex < 0) {
alert('Invalid value, please enter 1, 2 or 3');
}
numbers[prevIndex] = numbers[index];
numbers[index] = newVal;
return prevIndex;
}
function updateNumbersView() {
$(".numbers").each(function(idx, elem) {
elem = $(elem);
if (parseInt(elem.val(), 10) !== numbers[idx]) {
elem.val(numbers[idx]);
}
});
}
$(".numbers").change(function() {
var self = $(this);
var curNumber = parseInt(self.val(), 10);
var curIndex = $(".numbers").index(self);
if (curNumber === numbers[curIndex]) {
return false;
}
var changedIndex = setNumber(curIndex, curNumber);
$('.numbers').eq(changedIndex).val(numbers[changedIndex]);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" value="1" min="1" max="3" step="1" class="numbers" />
<input type="number" value="2" min="1" max="3" step="1" class="numbers" />
<input type="number" value="3" min="1" max="3" step="1" class="numbers" />
Run codeHide result source
share