由于Javascript,Backspace(删除字符)在Firefox中无法正常工作
Backspace (deleting characters) not working properly in Firefox due to Javascript
我正在为一位同事编写一些Javascript/Jquery,该同事应该在用户键入时编辑文本字段中的文本。该代码的目的是为字符串添加格式(特别是将12个字符的字符串格式化为有效的格式化mac地址),但在Firefox上,一旦字符输入文本字段,我就无法使用退格删除字符。
以下是进行格式化的代码:
$(document).ready(function () {
var length = 0;
$("#mac_input").focusin(function (evt) {
$(this).keypress(function () {
content = $(this).val();
content_pre_format = content.replace(/':/g, '');
content_formatted = content_pre_format.replace(/'n/g, '');
var text_input = $('#mac_input');
if (content_formatted.length % 12 == 0 && length != 0) {
text_input.val(text_input.val() + "'n");
}
length = content_formatted.length % 12;
if (length % 2 == 0 && length != 0) {
if (text_input.val().charAt(text_input.val().length - 1) == ':') {
} else {
text_input.val(text_input.val() + ':');
}
}
});
});
});
编辑:我发现了更多关于这个bug的信息。当我开始键入时,比如说"abc",当我键入"c"时,脚本会编辑字段以显示"ab:c"。我可以退格"c"answers":",但不能再退了。此时,文本字段显示"ab",但如果我使用ctrl-a全选,文本字段将变为"ab:"
这里有一个更强大的解决方案(如果用户开始删除除搅拌结束之外的任何位置,当前的解决方案都会中断):
$(document).ready(function() {
$("#mac_input").keydown(function (event) {
if (!((event.which > 47 && event.which < 71) || (event.which > 95 && event.which < 106))) {
event.preventDefault();
}
});
$("#mac_input").keyup(function () {
var content=$(this).val();
content = content.replace(/':/g, '');
content = content.replace(/'n/g, '');
content = content.replace(/('w{12}(?!$))/g, '$1'n').replace(/('w{2}(?!'n)(?!$))/g, '$1:')
$(this).val(content);
});
});
它确保字符串始终被解析为MAC地址的集合
为了解释,它使用正则表达式,([abcdef0123456789]{12}(?!$))
匹配任何符合MAC地址且不在字符串末尾的12个字符的序列(这就是(?!$))
前瞻性所做的),并将其替换为匹配的字符串和附加的换行符,然后它匹配任何后面没有紧跟换行符或字符串末尾的2个MAC地址字符(([abcdef0123456789]{2}
)的序列((?!'n)(?!$)
)。
只要在keypress
处理程序的开头检查一下这个:if(event.key == "Backspace") {return;}
,你就应该没事了。
注意:您必须将event
参数添加到keypress
处理程序函数中。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)