如何使用 javascript 中的 dom 从用户那里获取数组和数组元素大小的输入?
How to take input from user for size of an array and array elements using dom in javascript?
我正在构建一个 Web 项目,它将执行各种排序算法来对数组进行排序。为此,我想从用户那里获取数组大小的输入,以及输入大小的数组元素的用户输入。我的代码没有得到预期的结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="screen-body-item">
<div class="app-form">
<div class="app-form-group">
<input type="text" class="app-form-control" placeholder="enter size" id="size">
<input type="text" class="app-form-control" placeholder="enter element" id="ele">
<input type="button" value="" value="add value" class="app-form-button" onclick="addval()">
</div>
</div>
</div>
</div>
<script>
function addval() {
var inputArray = [];
let size = document.getElementById('size').value;
for (var i = 0; i < size; i++) {
inputArray[i] = document.getElementById('ele').value;
}
}
</script>
</body>
</html>
您正在遍历 inputArray
,但其中没有任何元素。您必须先用项目填充它。
在这种情况下,我们可以简化代码,使用Array
函数创建一个包含一定数量项目的数组,并Array.fill
将数组中的每个项目设置为指定的值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="screen-body-item">
<div class="app-form">
<div class="app-form-group">
<input type="text" class="app-form-control" placeholder="enter size" id="size">
<input type="text" class="app-form-control" placeholder="enter element" id="ele">
<input type="button" value="" value="add value" class="app-form-button" onclick="addval()">
</div>
</div>
</div>
<script>
function addval() {
let size = document.getElementById('size').value;
let value = document.getElementById('ele').value;
var inputArray = Array(+size).fill(value)
console.log(inputArray)
}
</script>
</body>
</html>
这段代码看起来有点冗长,因为我有一个函数可以在输入中只输入数字和 space 元素。并添加了一些过滤器。
请自行尝试此代码。如果有不明白的地方请在下方留言,我很高兴有人解释。
请注意:用户只能输入数字。
let sizeInput = document.querySelector('#size');
let eleInput = document.querySelector('#ele');
// allow only numbers to type
[eleInput, sizeInput].forEach(input=>{
input.addEventListener('keypress', function(event){
event.preventDefault();
let value = parseInt(event.key);
if(!isNaN(value)) return input.value += value;
if(input == eleInput && event.key == ' ') return input.value += event.key;
});
});
// main function
function addval(event) {
event?.preventDefault(); // if button is in form element
let inputArray = [];
let size = parseInt(sizeInput.value);
let elements = eleInput.value;
if(isNaN(size)) return alert('Please enter valid size.'); // stop and show alert if size is invalid or empty
elements = elements.trim(); // remove space from starting and end
elements = elements.replace(/ +/g, ' '); // remove multiple spaces
elements = elements.split(' '); // split by space
if(elements.length != size) return alert(`Please enter ${size < elements.length ? 'only': ''} ${size} elements`);
inputArray = elements;
console.log(inputArray); // remove later
return inputArray;
}
<input type="text" class="app-form-control" placeholder="enter size" id="size">
<input type="text" class="app-form-control" placeholder="enter element" id="ele">
<input type="button" value="add value" class="app-form-button" onclick="addval()">
我正在构建一个 Web 项目,它将执行各种排序算法来对数组进行排序。为此,我想从用户那里获取数组大小的输入,以及输入大小的数组元素的用户输入。我的代码没有得到预期的结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="screen-body-item">
<div class="app-form">
<div class="app-form-group">
<input type="text" class="app-form-control" placeholder="enter size" id="size">
<input type="text" class="app-form-control" placeholder="enter element" id="ele">
<input type="button" value="" value="add value" class="app-form-button" onclick="addval()">
</div>
</div>
</div>
</div>
<script>
function addval() {
var inputArray = [];
let size = document.getElementById('size').value;
for (var i = 0; i < size; i++) {
inputArray[i] = document.getElementById('ele').value;
}
}
</script>
</body>
</html>
您正在遍历 inputArray
,但其中没有任何元素。您必须先用项目填充它。
在这种情况下,我们可以简化代码,使用Array
函数创建一个包含一定数量项目的数组,并Array.fill
将数组中的每个项目设置为指定的值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="screen-body-item">
<div class="app-form">
<div class="app-form-group">
<input type="text" class="app-form-control" placeholder="enter size" id="size">
<input type="text" class="app-form-control" placeholder="enter element" id="ele">
<input type="button" value="" value="add value" class="app-form-button" onclick="addval()">
</div>
</div>
</div>
<script>
function addval() {
let size = document.getElementById('size').value;
let value = document.getElementById('ele').value;
var inputArray = Array(+size).fill(value)
console.log(inputArray)
}
</script>
</body>
</html>
这段代码看起来有点冗长,因为我有一个函数可以在输入中只输入数字和 space 元素。并添加了一些过滤器。
请自行尝试此代码。如果有不明白的地方请在下方留言,我很高兴有人解释。
请注意:用户只能输入数字。
let sizeInput = document.querySelector('#size');
let eleInput = document.querySelector('#ele');
// allow only numbers to type
[eleInput, sizeInput].forEach(input=>{
input.addEventListener('keypress', function(event){
event.preventDefault();
let value = parseInt(event.key);
if(!isNaN(value)) return input.value += value;
if(input == eleInput && event.key == ' ') return input.value += event.key;
});
});
// main function
function addval(event) {
event?.preventDefault(); // if button is in form element
let inputArray = [];
let size = parseInt(sizeInput.value);
let elements = eleInput.value;
if(isNaN(size)) return alert('Please enter valid size.'); // stop and show alert if size is invalid or empty
elements = elements.trim(); // remove space from starting and end
elements = elements.replace(/ +/g, ' '); // remove multiple spaces
elements = elements.split(' '); // split by space
if(elements.length != size) return alert(`Please enter ${size < elements.length ? 'only': ''} ${size} elements`);
inputArray = elements;
console.log(inputArray); // remove later
return inputArray;
}
<input type="text" class="app-form-control" placeholder="enter size" id="size">
<input type="text" class="app-form-control" placeholder="enter element" id="ele">
<input type="button" value="add value" class="app-form-button" onclick="addval()">