简体   繁体   English

Javascript 输入字段 onchage/oninput

[英]Javascript input field onchage/oninput

Please help, how to make input like this in javascript?请帮忙,如何在javascript中进行这样的输入? Minimum number that can be entered = 0.01 Maximum number that can be entered = 94.99 if it passes the minimum/maximum it will automatically return to the default number for the minimum/maximum.可以输入的最小数字 = 0.01 可以输入的最大数字 = 94.99 如果超过最小/最大,它将自动返回到最小/最大的默认数字。 Meanwhile, if you enter the number 01.21, the number will automatically change to 1.21同时,如果您输入数字 01.21,数字将自动变为 1.21

Thanks for taking the time to answer, and provide direction.感谢您花时间回答,并提供指导。

I want to create an input field similar to this 我想创建一个与此类似的输入字段

I tried like this but it doesn't work我试过这样但它不起作用

 function minmax(value, min, max) { if (parseInt(value) < 0.01 || isNaN(value)) return 0.01; else if (parseInt(value) > 94.99) return 94.99; else return value; }
 <input type="text" name="textWeight" id="txtWeight" maxlength="5" onkeyup="this.value = minmax(this.value, 0.01, 94.99)" />

You probably don't even need to use JavaScript for this, just plain HTML can solve your problem.您可能甚至不需要为此使用 JavaScript,只需纯 HTML 即可解决您的问题。 The input tag has the min and max properties that set minimum and maximum values for the input. input标签具有设置输入的最小值和最大值的minmax属性 Also, you could set the step of your input to 0.01.此外,您可以将输入的step长设置为 0.01。

This should solve your problems on the front-end.这应该可以解决您在前端的问题。 But note that this isn't enough to ensure that the data received by the back-end (if that's the case) is following your specifications, because malicious users can alter your page and send the data anyways, or even bypass the front-end completely.但请注意,这不足以确保后端接收到的数据(如果是这种情况)符合您的规范,因为恶意用户可以更改您的页面并发送数据,甚至绕过前端完全地。 So, the back-end should also check if the data received is on the right format.因此,后端还应检查接收到的数据格式是否正确。

You can use onchange event for this or add an event listerner to the input field and min, max to specify the maximum and minimum number.您可以为此使用onchange事件或将事件侦听器添加到输入字段和 min, max 以指定最大和最小数量。

<input id="input1" type="number" onchange="minmax()" min="0.01" max="94.99">

Then you can use javascript to compare the user entered value with min and max values using an if condition.然后,您可以使用 javascript 使用 if 条件将用户输入的值与最小值和最大值进行比较。 If the user entered value is invalid simply replace the input field value with either min or max value!如果用户输入的值无效,只需将输入字段值替换为最小值或最大值!

Use parseFloat() since you are dealing with floats.使用parseFloat()因为您正在处理浮点数。

function minmax() {
   let inp_field = document.getElementById("input1");

   let val = parseFloat(inp_field.value),
       min = parseFloat(inp_field.min),
       max = parseFloat(inp_field.max);

   if (val < min) {
      inp_field.value = min;
   } else if (val > max) {
      inp_field.value = max;
   } else {
      inp_field.value = val;
   }
}

And for the last part the parseFloat will automatically do that for you by clearing the leading zeroes.对于最后一部分, parseFloat将通过清除前导零自动为您执行此操作。

There are two event handlers limitRange() is bound to the input event and keepDot() is bound to the keyup event (set on capture, note the third parameter is true ).有两个事件处理程序limitRange()绑定到输入事件, keepDot()绑定到 keyup 事件(在捕获时设置,注意第三个参数是true )。 keepDot() just handles the way Firefox refuses to accept the . keepDot()只是处理 Firefox 拒绝接受. key.钥匙。

x.addEventListener('input', limitRange);
x.addEventListener('keyup', keepDot, true);

It has two jobs.它有两个工作。 First job is to limit input lower than .01 or higher than 94.99第一项工作是限制低于 0.01 或高于 94.99 的输入

this.value = +v < .01 ? '.01' : +v > 94.99 ? '94.99' : v;

The second job is to remove any leading zeros第二项工作是删除任何前导零

 this.value = v.replace(/^0+/, '');

 const x = document.querySelector('#x') x.addEventListener('input', limitRange); x.addEventListener('keyup', keepDot, true); function limitRange(e) { let v = this.value; this.value = +v < 0.01 ? '0.01' : +v > 94.99 ? '94.99' : v; this.value = this.value.replace(/^0+(?=\d)/, '') } function keepDot(e) { if (e.key === '.') { this.value = this.value + '.' } }
 <input id='x' type='number' min='.01' max='94.99' step='any'>

  • call on onchange method调用onchange方法
  • else return value - 0.01; return float value返回浮点值
  • parseInt() return integer value use parseFloat() return float valve parseInt()返回整数值 使用parseFloat()返回浮子阀
  • value - 0 remove useless 0 in value like 01.11 to 1.11` value - 0删除无用的 0 值,如01.11到 1.11`

 function minmax(value, min, max) { if (parseFloat(value) < 0.01 || isNaN(value)) return 0.01; else if (parseInt(value) > 94.99) return 94.99; else return value - 0; }
 <input type="text" name="textWeight" id="txtWeight" maxlength="5" onchange="this.value = minmax(this.value, 0.01, 94.99)" />

Hello thank you for question, the solution is simple try out once below code.您好,谢谢您的提问,解决方案很简单,请在下面的代码中试用一次。

<input type="text" name="textWeight" id="txtWeight" maxlength="5" onkeyup="this.value = minmax(this.value, 0.01, 94.99)" />

Here you need to use parseFloat() since you are using floating values.在这里您需要使用parseFloat()因为您使用的是浮点值。

function minmax(value, min, max) {
  if ((parseFloat(value) < 0.01 && value.length > 1) || isNaN(value))
    return 0.01;
  else if (parseFloat(value) > 94.99)
    return 94.99;
  else return value;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM