我有一个使用语义UI输入字段开发的表单。我的要求是输入字段应该只接受数字,消除空格,并且应该允许从输入字段 ctrl + c 复制。
我做了一些研究,这个jQuery代码似乎符合我的要求,因为它在Chrome中运行良好。但FireFox不允许我使用退格键,也不允许使用复制功能。
这是我正在使用的jQuery代码;
$("#checker").on("keypress keyup blur", function(event) {
$(this).val($(this).val().replace(/[^\d ].+/, ""));
if ((event.which < 48 || event.which > 57)) {
event.preventDefault();
}
});
如何在FireFox中使用它就像在chrome中一样?
答案 0 :(得分:2)
您可以使用单个regex
模式仅允许使用数字,并且无需阻止其他键编号,它可以在Chrome和FireFox上运行等。
$("#checker").on("keypress input blur", function(event) {
var value = $(this).val();
value = value.replace(/\D+/, '');
$(this).val(value);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="checker" />
&#13;
答案 1 :(得分:1)
您可以检测到'ctrl'键然后检测'c'键,在这种情况下,让事件按预期发生。否则你会阻止这个动作。
这是一个在FireFox中有效的非抛光示例。我相信它可以改进:
$(function () {
var ctrlDown = false,
ctrlKey = 17,
cKey = 67,
backSpaceKey = 8;
$("#checker").on("keydown keyup blur", function (event) {
// Checks if 'ctrl' key was pressed and raises the flags
if (event.which == ctrlKey) {
ctrlDown = true;
}
// Checks if 'c' key was pressed, resets the ctrl key and continues to execute the copy action
if (event.which == cKey) {
ctrlDown = false;
}
else if ((event.which < 48 || event.which > 57) && (event.which != backSpaceKey)) {
// Cancel any key and reset all flags
event.preventDefault();
ctrlDown = false;
}
$(this).val($(this).val().replace(/[^\d ].+/, ""));
});
});
如果你想要将其他键(例如箭头键)排除在预防之外,那么你可以将它们添加到'if'子句,在那里我嘲笑按下'退格'键,然后我不会阻止行动。
您也可以使用正则表达式来过滤数字,而不是处理所有其他键。它是由你决定。我认为Regex解决方案要好得多。