Allow only numbers and ctrl+a , ctrl+v , ctrl+c to a textbox
Try with event.keyCode
and event.metaKey
like this.
$(document).ready(function() {
$(".allow_only_numbers").keydown(function(e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
// Allow: Ctrl+A,Ctrl+C,Ctrl+V, Command+A
((e.keyCode == 65 || e.keyCode == 86 || e.keyCode == 67) && (e.ctrlKey === true || e.metaKey === true)) ||
// Allow: home, end, left, right, down, up
(e.keyCode >= 35 && e.keyCode <= 40)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type="number" class="allow_only_numbers" />
EDIT:
Remove the following code snippets from your code.
var ctrlDown = false;
var ctrlKey = 17, vKey = 86, cKey = 67;
if (e.keyCode === ctrlKey) {
ctrlDown = true;
}
Because ctrlDown
will be false
while pressing C
and V
for copy and paste. And hence your ctr+c
and ctrl+v
is not working.
$(".allow_only_numbers").on("input",function (e) {
e.target.value = e.target.value.replace(/[^0-9]/g,'')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="allow_only_numbers" />
$(".allow_only_numbers").keydown(function (e) {
var isModifierkeyPressed = (e.metaKey || e.ctrlKey || e.shiftKey);
var isCursorMoveOrDeleteAction = ([46,8,37,38,39,40].indexOf(e.keyCode) != -1);
var isNumKeyPressed = (e.keyCode >= 48 && e.keyCode <= 58) || (e.keyCode >=96 && e.keyCode <= 105);
var vKey = 86, cKey = 67,aKey = 65;
switch(true){
case isCursorMoveOrDeleteAction:
case isModifierkeyPressed == false && isNumKeyPressed:
case (e.metaKey || e.ctrlKey) && ([vKey,cKey,aKey].indexOf(e.keyCode) != -1):
break;
default:
e.preventDefault();
}
});
here is working example
https://jsfiddle.net/stwzhceL/8/
this allow you ctrl+a
,ctrl+c
and ctrl+v
as well as arrow keys,delete key and backspace key.
plus this code covers mac as well.(which is cmd+a/cmd+c/cmd+v
)