我想只有正面的價值觀,有沒有什麼辦法來防止它僅使用HTML
請不要建議驗證方法有什麼辦法可以防止輸入類型=「數字」變成負值嗎?
回答
使用min
attribute這樣的:
<input type="number" min="0">
我對@Abhrabm answer不滿意,因爲:
它只能防止負號號碼從 上下箭頭輸入,而用戶可以從鍵盤輸入負號。
解決方案是爲了防止與鍵碼:由@Hugh Guiney提供
// Select your input element.
var number = document.getElementById('number');
// Listen for input event on numInput.
number.onkeydown = function(e) {
if(!((e.keyCode > 95 && e.keyCode < 106)
|| (e.keyCode > 47 && e.keyCode < 58)
|| e.keyCode == 8)) {
return false;
}
}
<form action="" method="post">
<input type="number" id="number" min="0" />
<input type="submit" value="Click me!"/>
</form>
澄清:
什麼是被檢查的鍵碼:
- 95,< 106對應於數字小鍵盤0至9;
- 47,< 58對應於Number Row上的0到9;和8是 Backspace。
所以這個腳本可以防止輸入無效的密鑰。
Upvoted,但我認爲這將有助於澄清什麼關鍵代碼被檢查:> 95,<106對應於數字0到9; > 47,<58對應於Number Row上的0至9; 8是Backspace。所以這個腳本阻止了任何鍵,但是輸入了這些鍵。這是徹底的,但我認爲對於本機支持數字輸入的瀏覽器來說可能是過度的,這些輸入已經過濾了字母鍵(除了像「e」這樣的可以具有數字含義的字符)。它可能足以防止189(短劃線)和109(減)。然後結合'min =「0」'。 –
謝謝。作品:) –
@Manwal它限制使用鍵盤複製和粘貼數字。並允許我使用鼠標複製粘貼負數。 – Beniton
僅供參考:與jQuery可以覆蓋在事件的內容負值用下面的代碼:
$(document).ready(function(){
$("body").delegate('#myInputNumber', 'focusout', function(){
if($(this).val() < 0){
$(this).val('0');
}
});
});
這並不能取代服務器端驗證!
@Manwal答案很好,但我喜歡使用較少的代碼行來獲得更好的可讀性。另外我喜歡在html中使用onclick/onkeypress用法。
我建議的解決方案確實是相同的: 添加
min="0" onkeypress="return isNumberKey(event)"
到HTML的輸入和
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode;
return !(charCode > 31 && (charCode < 48 || charCode > 57));
}
的JavaScript函數。
如上所述,它也是如此。這只是關於如何解決問題的個人偏好。
此代碼適合我。能否請您檢查:
<input type="number" name="test" min="0" oninput="validity.valid||(value='');">
這裏有一個角2的解決方案:
創建一個類OnlyNumber
import {Directive, ElementRef, HostListener} from '@angular/core';
@Directive({
selector: '[OnlyNumber]'
})
export class OnlyNumber {
// Allow decimal numbers. The \. is only allowed once to occur
private regex: RegExp = new RegExp(/^[0-9]+(\.[0-9]*){0,1}$/g);
// Allow key codes for special events. Reflect :
// Backspace, tab, end, home
private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home'];
constructor(private el: ElementRef) {
}
@HostListener('keydown', ['$event'])
onKeyDown(event: KeyboardEvent) {
// Allow Backspace, tab, end, and home keys
if (this.specialKeys.indexOf(event.key) !== -1) {
return;
}
// Do not use event.keycode this is deprecated.
// See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
let current: string = this.el.nativeElement.value;
// We need this because the current value on the DOM element
// is not yet updated with the value from this event
let next: string = current.concat(event.key);
if (next && !String(next).match(this.regex)) {
event.preventDefault();
}
}
}
OnlyNumber添加到聲明中app.module.ts和使用像它這樣在任何地方在您的應用程序
<input OnlyNumber="true">
很好地工作謝謝 –
有沒有一種允許粘貼的方法?此外,我改變了正則表達式:/^-?[0-9]+(0.[0-9]*){0,1}$/g允許負數,但它似乎不工作? –
對我來說,解決辦法是:
<input type="number" min="0" oninput="this.value = Math.abs(this.value)">
一旦你使用模式和noformvalidate與角度真的最好的解決方案,因爲模型不更新,如果不在範圍內。我的情況:'' – sebius
當用戶知道默認值爲0時,此功能效果最佳。其他智能用戶會感到困惑退格按下爲什麼字段不清除。除此之外,這是最好的解決方案。+ 1 –
簡單的方法:
<input min='0' type="number" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57">
該解決方案使包括副本鍵盤粘貼所有的鍵盤功能。它可以防止用鼠標粘貼負數。它適用於所有瀏覽器,codepen上的演示使用bootstrap和jQuery。這應該適用於非英語語言設置和鍵盤。如果瀏覽器不支持粘貼事件捕獲(IE),它將在聚焦後刪除負號。該解決方案的行爲與本機瀏覽器應該使用min = 0 type = number一樣。
標記:
<form>
<input class="form-control positive-numeric-only" id="id-blah1" min="0" name="nm1" type="number" value="0" />
<input class="form-control positive-numeric-only" id="id-blah2" min="0" name="nm2" type="number" value="0" />
</form>
的Javascript
$(document).ready(function() {
$("input.positive-numeric-only").on("keydown", function(e) {
var char = e.originalEvent.key.replace(/[^0-9^.^,]/, "");
if (char.length == 0 && !(e.originalEvent.ctrlKey || e.originalEvent.metaKey)) {
e.preventDefault();
}
});
$("input.positive-numeric-only").bind("paste", function(e) {
var numbers = e.originalEvent.clipboardData
.getData("text")
.replace(/[^0-9^.^,]/g, "");
e.preventDefault();
var the_val = parseFloat(numbers);
if (the_val > 0) {
$(this).val(the_val.toFixed(2));
}
});
$("input.positive-numeric-only").focusout(function(e) {
if (!isNaN(this.value) && this.value.length != 0) {
this.value = Math.abs(parseFloat(this.value)).toFixed(2);
} else {
this.value = 0;
}
});
});
<input type="number" name="credit_days" pattern="[^\-]+"
#credit_days="ngModel" class="form-control"
placeholder="{{ 'Enter credit days' | translate }}" min="0"
[(ngModel)]="provider.credit_days"
onkeypress="return (event.charCode == 8 || event.charCode == 0 ||
event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <=
57" onpaste="return false">
oninput="this.value=(this.value < Number(this.min) || this.value > Number(this.max)) ? '' : this.value;"
儘管這段代碼可以解決這個問題,[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)真的有助於提高你的文章的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 –
雖然這可能是正確的答案,但它缺乏足夠的細節。請解釋_why_這是否有效。當使用堆棧溢出時,考慮到這是一個_living知識庫_,那些不分享知識的答案遠沒有那麼有用。 –
- 1. 有什麼辦法可以防止Java把我的雙重變成指數值?
- 2. 有什麼辦法可以防止靜態變量值碰撞?
- 3. 有沒有什麼辦法可以防止url注入?
- 4. 有什麼辦法可以防止人們改變ip?
- 5. 有沒有什麼辦法來防止輸入事件jquery datepicker
- 6. 有什麼辦法可以從超類中省略變量嗎?
- 7. 有什麼辦法可以防止在.NET中移動文件?
- 8. 有什麼辦法可以防止替換JavaScript對象屬性?
- 9. 有什麼辦法可以防止RecyclerView脫離視圖?
- 10. 有什麼辦法可以防止python中的副作用?
- 11. 有什麼辦法可以防止鍵盤出現在android
- 12. HTML5:有什麼辦法可以在輸入類型編號中將逗號改成空格嗎?
- 13. 有什麼辦法可以這樣嗎?
- 14. 有什麼辦法可以防止m2e修改eclipse .classpath文件嗎?
- 15. 有什麼辦法可以檢查一個類型是枚舉類型嗎?
- 16. 如何防止輸入負數或4位以上的數字
- 17. 有什麼辦法可以防止反應 - 選擇(Select.Async)刪除未聚焦的搜索輸入值?
- 18. 防止輸入類型的最大>最大值=數字
- 19. 有什麼辦法可以防止Mozilla在網址中輸入錯字時搜索網頁?
- 20. 有什麼辦法可以從父類調用子方法嗎?
- 21. 有沒有什麼辦法,輸入/ LeaveCriticalSection可以留下
- 22. 有什麼辦法可以轉換這些不可轉換的類型嗎?
- 23. 有什麼方法可以輸入另一種類型的Immutable Map嗎?例如:
- 24. 有什麼辦法可以重定向smbclient的輸出嗎?
- 25. 有什麼辦法可以從PyQt或PySide自動完成方法和類嗎?
- 26. 有什麼辦法可以插入到int(11)類型的mysql表中雙數字嗎?
- 27. 有什麼辦法可以將C++程序轉換成ASP.NET嗎?
- 28. 有什麼辦法可以生成級聯刪除語句嗎?
- 29. 有什麼辦法可以循環變量名嗎?
- 30. 有什麼辦法可以在random.randint中使用raw_input變量嗎?
這線程回答了好得多的程度同樣的問題:http://stackoverflow.com /問題/ 3 1575496/prevent-negative-inputs-in-form-input-type-number – PiotrWolkowski