javascript退格和删除在IE中工作,而不是在FireFox中

时间:2012-06-29 07:06:31

标签: javascript internet-explorer firefox google-chrome backspace

我使用以下函数进行十进制验证,它在IE中工作正常,Chrome不在FF.Backspace中,删除键在IE和Chrome中工作。在FireFox中没有。

    $('.decimalValidate').live('keypress', function (e) {
        var decimalid = $(this).attr("id");
        var decimalval = $('#' + decimalid).val();

        var decimalvalidate = ApplyDecimalFilter(decimalval, e);
        if (decimalvalidate == false) return false;
    });



    function ApplyDecimalFilter(id, event)
        {
            try {
                return NewDecimalFilter(id, event);
            } catch (e) {
                alert(e.message);
            }
        }

    function NewDecimalFilter(o, event) {
            if (event.which > 47 && event.which < 58) {
                return true;
            }
            if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1)  {
                return true;
            }
            return false;
        }

此if条件仅在FireFox中不起作用。这用于输入唯一一个点符号

if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1)  {
                return true;
            }

2 个答案:

答案 0 :(得分:2)

通常,这种类型的验证需要谨慎进行,因为文本可以通过键盘以外的方式更改为输入(例如,粘贴,文本拖动和上下文菜单中的“删除”选项)。提交表单时,限制键盘输入仍需要进行适当的验证。

使用keyCode检测按下的实际按键(通常位于keydownkeyup而非keypress)和which以检测所输入的字符(仅限在keypress事件中。一般来说,查看keyCode事件的keypress属性并不是一个好主意,但对于删除和退格的情况,它很好:并非所有浏览器都为这些键触发keypress事件但是对于那些,keyCode属性是一致的。

总结:将(event.which == 8 || event.which == 46)更改为(event.keyCode == 8 || event.keyCode == 46),其余部分保持不变。

以下是我见过的JavaScript关键事件的最佳参考:http://unixpapa.com/js/key.html

答案 1 :(得分:1)

&#13;
&#13;
String
&#13;
&#13;
&#13;