由于Javascript,退格(删除字符)在Firefox中无法正常工作

时间:2014-10-09 23:57:57

标签: javascript jquery html

我正在为同事编写一些Javascript / Jquery,它应该在用户输入时编辑文本字段中的文本。代码的目的是为一串字符添加格式(特别是将十二个字符的字符串格式化为有效的格式化的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() + ':');
                }
            }

        });
    });
});

编辑:我想出了更多关于这个错误的信息。当我开始输入时,让我说" abc",当我输入" c"该脚本编辑该字段以显示" ab:c"。我可以退格" c"和":"但没有更多。此时,文本字段显示" ab"但是如果我使用ctrl-a选择all,则文本字段将更改为" ab:"

2 个答案:

答案 0 :(得分:2)

请在if(event.key == "Backspace") {return;}处理程序的开头检查:keypress,您应该没问题。

注意:您必须将event参数添加到keypress处理程序函数中。

答案 1 :(得分:2)

这是一个更强大的解决方案(如果用户开始删除除了搅拌结束之外的任何地方,当前解决方案将会中断):

$(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)(?!$))。