javascript - 如何在两个用户输入数字(最小值,最大值)之间找到随机整数
问题描述
我正在尝试开发一个音乐制作随机化应用程序,并且我想在单击提交按钮时在用户输入的两个值(用户设置的最小值和最大值)之间生成一个随机整数。
我尝试混合使用以下函数,其中 min/maxBpm id 是 HTML 中的数字输入...
<tr>
<td>Min. BPM</td>
<td><input required type="number" name="minBpm" id="minBpm" /> <span id="spnMinBpm"></span></td>
</tr>
<tr>
<td>Max. BPM</td>
<td><input required type="number" id="maxBpm" /> <span id="spnMaxBpm"></span></td>
</tr>
JavaScript:
var minBpm, maxBpm;
document.addEventListener("DOMContentLoaded", function() {
minBpm = document.getElementById("minBpm").value;
maxBpm = document.getElementById("maxBpm").value;
submitBtn = document.getElementById("submitBtn");
$("#submitBtn").click = (function (){
Math.floor(Math.random() * maxBpm) + minBpm;
}
解决方案
您的逻辑几乎就在那里,但是它是 JS 和 jQuery 的奇怪组合。我建议坚持一个或另一个。
除了语法问题,您遇到的主要问题是您用来生成随机数的逻辑存在缺陷,因为它仅在最小值为1
. 您需要修改它以使用任何两个随机整数。
这是一个jQuery实现:
jQuery($ => {
let $minBpm = $('#minBpm');
let $maxBpm = $('#maxBpm');
$('.bpm-input').on('input', () => {
let minBpm = parseInt($minBpm.val(), 10);
let maxBpm = parseInt($maxBpm.val(), 10);
if (minBpm && maxBpm) {
let rndBpm = Math.floor(Math.random() * (maxBpm - minBpm + 1) + minBpm);
console.log(rndBpm);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td>Min. BPM</td>
<td>
<input required type="number" class="bpm-input" name="minBpm" id="minBpm" />
<span id="spnMinBpm"></span>
</td>
</tr>
<tr>
<td>Max. BPM</td>
<td>
<input required type="number" class="bpm-input" name="maxBpm" id="maxBpm" />
<span id="spnMaxBpm"></span>
</td>
</tr>
</table>
作为参考,这里是使用纯 JS 代码的相同逻辑:
document.addEventListener("DOMContentLoaded", function() {
let minBpmEl = document.querySelector('#minBpm');
let maxBpmEl = document.querySelector('#maxBpm');
document.querySelectorAll('.bpm-input').forEach(el => {
el.addEventListener('input', e => {
let minBpm = parseInt(minBpmEl.value, 10);
let maxBpm = parseInt(maxBpmEl.value, 10);
if (minBpm && maxBpm) {
let rndBpm = Math.floor(Math.random() * (maxBpm - minBpm + 1) + minBpm);
console.log(rndBpm);
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td>Min. BPM</td>
<td>
<input required type="number" class="bpm-input" name="minBpm" id="minBpm" />
<span id="spnMinBpm"></span>
</td>
</tr>
<tr>
<td>Max. BPM</td>
<td>
<input required type="number" class="bpm-input" name="maxBpm" id="maxBpm" />
<span id="spnMaxBpm"></span>
</td>
</tr>
</table>
推荐阅读
- android - Android spinner, OnItemSelectedListener 选择同一项时不调用?
- python - 如何正确计算加密货币价格的 BBP(布林带百分比)?
- zxing - zxing 和 Aforge aztec 条码读取
- python - 使用 tf.keras.Model.fit 进行训练时如何将自定义摘要添加到 tensorboard
- android - 如何从桌面上创建的 python-flask Web 应用程序创建 android 应用程序?
- java - 即使引用的文件位于项目根目录中,PrintWrite 仍然会抛出未找到文件的异常
- python - 在二十一点中获得正确的价值
- php - 用不同的颜色或符号或 div 突出显示新添加的用户
- java - 如何在这个 Firebase 结构上插入和检索 Android 代码?
- jquery - jquery中的多级json读取