Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一个为数字类型输入动态生成步骤属性的线性程序?_Javascript_Html - Fatal编程技术网

Javascript 一个为数字类型输入动态生成步骤属性的线性程序?

Javascript 一个为数字类型输入动态生成步骤属性的线性程序?,javascript,html,Javascript,Html,我有一个输入类型number: 没有步骤属性,但用户可以开始输入数字,如“21”、“1.12”、“0.00123”,在keydup上,脚本将确定正确的步骤。例如,21等于1,1.12等于0.01,0.00123等于0.00001,依此类推 我试过这个: input.addEventListener('keyup',(e)=>{ 常量值=input.value; if(value.split('.')。length==1){ input.step=1 回来 } 让精度=值。拆分('.')[1

我有一个输入类型
number


没有
步骤
属性,但用户可以开始输入数字,如“21”、“1.12”、“0.00123”,在keydup上,脚本将确定正确的
步骤
。例如,21等于1,1.12等于0.01,0.00123等于0.00001,依此类推

我试过这个:

input.addEventListener('keyup',(e)=>{
常量值=input.value;
if(value.split('.')。length==1){
input.step=1
回来
}
让精度=值。拆分('.')[1]。替换(/。/g,'0'))
精度=`0.${precision.substring(0,precision.length-1)}1`
log(`precision:${precision}`)
input.step=精度
})
一个“一行”可以是对
替换的双重调用:

input.addEventListener('keyup',(e)=>
input.step=input.value.replace(/[^.]/g,“0”)。replace(/\d$/,“1”)
);
一个“一行”可以是对
替换的双重调用:

input.addEventListener('keyup',(e)=>
input.step=input.value.replace(/[^.]/g,“0”)。replace(/\d$/,“1”)
);

这应该可以做到:

document.querySelector('input')。addEventListener('keyup',(e)=>{
console.log(`precision:${1/Math.pow(10,input.value.split('.')[1]?.length±0)}`)
})

这应该可以做到:

document.querySelector('input')。addEventListener('keyup',(e)=>{
console.log(`precision:${1/Math.pow(10,input.value.split('.')[1]?.length±0)}`)
})

不是一行,但非常清晰易读:

const fractionalPartLength = input.value.split('.')[1] && input.value.split('.')[1].length || 0
const precision = 10**(0-fractionalPartLength)

不是一行,但非常清晰易读:

const fractionalPartLength = input.value.split('.')[1] && input.value.split('.')[1].length || 0
const precision = 10**(0-fractionalPartLength)

您只需使用以下两种方法即可优化并降低脚本的复杂性:

input.addEventListener('keyup',(e)=>{
input.step=input.value.replace(/\d/g,'0')。replace(/\d$/,'1');
});

只需使用以下两种方法,即可优化并降低脚本的复杂性:

input.addEventListener('keyup',(e)=>{
input.step=input.value.replace(/\d/g,'0')。replace(/\d$/,'1');
});

为什么你认为你需要一行程序?你试图通过重构代码来完成什么?我并不真的需要一行程序,但这类问题带来了很多关于语言本身的知识。为了保持一致,当我输入9000时,这一步不应该是1000吗?。希望能有帮助。你为什么认为你需要一行程序?你试图通过重构代码来实现什么?我真的不需要一行程序,但这类问题带来了很多关于语言本身的知识。为了保持一致,当我输入9000时,这一步不应该是1000吗?。希望有帮助。
是在
[1]
类型脚本键入之后吗?不是,这是标准JS功能,是
是在
[1]
类型脚本键入之后吗?不是,这是标准JS功能,