我正在制作游戏并使用 JavaScript/jQuery 来花费角色属性点。我有六个像这样的输入,每个代表一个属性:
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
像这样的一个输入(“池”):
<input id="pool" type="number" min="0" max="36" step="1" value="36" readonly>
最后一个输入用作“池”,这意味着它是要花费在六个输入组上的剩余点的总和。我想要以下内容:
- 更改任何“attributeVal”输入会减去或恢复池中的点,该点不能大于 36 且小于 0。
- “attributeVal”的每个输入不能小于 1 且大于 36。
- “attributeVal”和“pool”不能为负数。
我尝试了不同的方法,但无法阻止玩家超过池最大值,主要是因为我不知道如何防止更改事件。
这是我迄今为止尝试过的:
<script>
let attributeVal = $(".attributeVal");
attributeVal.on("change paste keyup", function (e) {
let prev = $(this).data('val');
let maxPointsOverall = 42;
let spentPoints = 0;
let poolInput = $('#poolInput');
$(".attributeVal").each(function () {
spentPoints += +$(this).val();
});
if ((maxPointsOverall - spentPoints) < 0) {
$(this).val(prev);
poolInput.val(0);
} else {
poolInput.val(42 - spentPoints);
}
});
attributeVal.on("cut copy paste", function (e) {
e.preventDefault();
});
</script>
你能给我任何提示吗,我怎样才能使这个工作?
let attributeVal = $(".attributeVal");
attributeVal.on("change paste keyup", function(e) {
let prev = $(this).data('val');
let maxPointsOverall = 42;
let spentPoints = 0;
let poolInput = $('#poolInput');
$(".attributeVal").each(function() {
spentPoints += +$(this).val();
});
if ((maxPointsOverall - spentPoints) < 0) {
$(this).val(prev);
poolInput.val(0);
} else {
poolInput.val(42 - spentPoints);
}
});
attributeVal.on("cut copy paste", function(e) {
e.preventDefault();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label class="font-weight-bold unselectable mb-3">Points available
<input id="poolInput" type="number" min="0" max="36" step="1" value="36" readonly>
</label>
<div class="form-group">
<label>Strength
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
</label>
</div>
<div class="form-group">
<label>Endurance
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
</label>
</div>
<div class="form-group">
<label>Dexterity
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
</label>
</div>
<div class="form-group">
<label>Perception
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
</label>
</div>
<div class="form-group">
<label>Intelligence
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
</label>
</div>
<div class="form-group">
<label>Charisma
<input class="attributeVal" type="number" min="1" max="36" step="1" value="1">
</label>
</div>