目前我有以下代码
<input type="number" />
结果是这样的
右边的小选择器允许数字变为负数。我该如何防止呢?
我对使用有疑问type="number"
,它造成的问题多于解决的问题,无论如何我都会对其进行理智检查,所以我应该回到使用type="text"
吗?
目前我有以下代码
<input type="number" />
结果是这样的
右边的小选择器允许数字变为负数。我该如何防止呢?
我对使用有疑问type="number"
,它造成的问题多于解决的问题,无论如何我都会对其进行理智检查,所以我应该回到使用type="text"
吗?
我找到了另一种防止负数的解决方案。
<input type="number" name="test_name" min="0" oninput="validity.valid||(value='');">
这取决于您想要的精确度。如果您只想接受整数,则:
<input type="number" min="1" step="1">
例如,如果您想要浮点数,小数点后两位数:
<input type="number" min="0.01" step="0.01">
onkeypress
您可以通过在input
标签内添加来强制输入仅包含正整数。
<input type="number" onkeypress="return event.charCode >= 48" min="1" >
在这里,event.charCode >= 48
确保只返回大于或等于 0 的数字,而min
标签确保您可以通过在输入栏中滚动来达到最小值 1。
您可以通过以下方式将负输入变为正数:
<input type="number" onkeyup="if(this.value<0){this.value= this.value * -1}">
尝试
<input type="number" pattern="^[0-9]" title='Only Number' min="1" step="1">
您可以使用以下内容type="number"
仅接受正数:
input type="number" step="1" pattern="\d+"
如果您尝试输入负数,onkeyup 事件会阻止此操作,如果您使用输入数字上的箭头,onblur 事件会解析该部分。
<input type="number"
onkeyup="if(this.value<0)this.value=1"
onblur="if(this.value<0)this.value=1"
>
我找不到完美的解决方案,因为有些工作可以用于输入,但不能用于复制和粘贴,有些则相反。这个解决方案对我有用。它可以防止负数,键入“e”,复制和粘贴“e”文本。
创建一个函数。
<script language="JavaScript">
// this prevents from typing non-number text, including "e".
function isNumber(evt) {
evt = (evt) ? evt : window.event;
let charCode = (evt.which) ? evt.which : evt.keyCode;
if ((charCode > 31 && (charCode < 48 || charCode > 57)) && charCode !== 46) {
evt.preventDefault();
} else {
return true;
}
}
</script>
将这些属性添加到输入。这两个防止复制和粘贴非数字文本,包括“e”。您需要同时使两者生效。
<input type="number" oninput="validity.valid||(value='');" onpress="isNumber(event)" />
如果您使用的是 Vue ,您可以在此处参考此答案。我已将其提取到可以重复使用的 mixin 中。
这取决于您是否需要 int 或 float 字段。这是两者的样子:
<input type="number" name="int-field" id="int-field" placeholder="positive int" min="1" step="1">
<input type="number" name="float-field" id="float-field" placeholder="positive float" min="0">
int 字段附加了正确的验证,因为它的最小值为 1。然而,float 字段接受 0;为了解决这个问题,您可以再添加一个约束验证器:
function checkIsPositive(e) {
const value = parseFloat(e.target.value);
if (e.target.value === "" || value > 0) {
e.target.setCustomValidity("");
} else {
e.target.setCustomValidity("Please select a value that is greater than 0.");
}
}
document.getElementById("float-field").addEventListener("input", checkIsPositive, false);
请注意,这些解决方案都不能完全阻止用户尝试输入无效输入,但您可以调用checkValidity
orreportValidity
来确定用户是否输入了有效输入。
当然,您仍然应该进行服务器端验证,因为用户总是可以忽略客户端验证。
This solution might seem a little bit redundant, but takes care of every aspect.
In the form use this
<input type="number" min="0" (keypress)="onlyDigits($event)" >
and in the .ts define the function
onlyDigits(event) {
let code = event.charCode;
return (code >= 48 && code <= 57);
}
This ensures only positive numbers might be entered with the arrows. It also prevents typing of any non-digit char (including '-', '+' and 'e')
尝试这个:
null
和negitive
值。 <input
type="number"
min="0"
(input)="funcCall()" -- Optional
oninput="value == '' ? value = 0 : value < 0 ? value = value * -1 : false"
formControlName="RateQty"
[(value)]="some.variable" -- Optional
/>
如果需要文本输入,该模式也适用
<input type="text" pattern="\d+">
在您的输入类型中添加此代码;
onkeypress="return (event.charCode == 8 || event.charCode == 0 || event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 57"
例如:
<input type="text" name="age" onkeypress="return (event.charCode == 8 || event.charCode == 0 || event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 57" />
其他解决方案是使用Js使其成为正数(min选项可以被禁用并且在用户键入smth时无效)负数如果没有必要并且也可以使用on('keydown')事件!
let $numberInput = $('#whatEverId');
$numberInput.on('change', function(){
let numberInputText = $numberInput.val();
if(numberInputText.includes('-')){
$numberInput.val(Math.abs($numberInput.val()));
}
});
用这个。
onkeypress="return (event.charCode >= 48 && event.charCode <= 57 || event.charCode == 46)"
您可以输入整数和小数。
我认为最好使用类型文本而不是数字,因为使用类型=数字,您将面临一些问题,例如输入字段中的箭头键和向上和向下键的值变化。
<input type="text" onkeypress="return event.charCode>=48 && event.charCode<=57" />
<input type="number" min="1" step="1">
使用文本类型的输入,您可以使用它进行更好的验证,
return (event.keyCode? (event.keyCode == 69 ? false : event.keyCode >= 48 && event.keyCode <= 57) : (event.charCode >= 48 && event.charCode <= 57))? true : event.preventDefault();
(function ($) {
$.fn.inputFilter = function (inputFilter) {
return this.on('input keydown keyup mousedown mouseup select contextmenu drop', function () {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty('oldValue')) {
this.value = this.oldValue;
//this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = '';
}
});
};
})(jQuery);
$('.positive_int').inputFilter(function (value) {
return /^\d*[.]?\d{0,2}$/.test(value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" class="positive_int"/>
上面的代码适用于所有人!它还将防止插入超过 2 个小数点。如果您不需要这个,只需删除\d{0,2} 或者如果需要更有限的小数点,只需更改数字 2
尝试这个:
Yii2 : Validation rule
public function rules() {
return [
['location_id', 'compare', 'compareValue' => 0', 'operator' => '>'],
];
}