jquery不在Firefox中工作但在IE中工作

时间:2012-06-29 09:20:23

标签: jquery internet-explorer firefox google-chrome

我使用以下函数进行十进制验证它在IE和Chrome中工作正常。但是没有在Fire Fox中工作。如果我在火狐中运行此代码我不能输入任何字符。如何解决这个问题?

   $('.decimalValidate').live('keypress', function (event) {
       var decimalval= $(this).val();
       if ((event.which > 47 && event.which < 58)) {
           return true;
       }
       if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1)  {
           return true;
       }
       return false;                          
   });

这种情况在FF中不起作用

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

1 个答案:

答案 0 :(得分:2)

您可以使用jQuery 1.7.x尝试此 .on() 委托事件处理程序,因为不推荐使用live()

委托事件的.on()语法为:

$(container).on(eventNaem, target, eventHandler)

此处,container指向动态无法显示的任何Static-element

$(document).on('keypress', '.decimalValidate', function(event) {

     // var decimalid = $(this).attr("id"); // I think you don't need this

    var decimalval = $(this).val(); // or this.value

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

根据评论

  • backspace无效

您正在使用以下条件处理backspacedelete

(event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1

设置验证:

如果您的文本框中没有包含.backspacedelete键,则按下该条件块中的执行代码。

当您的文本框包含.且按下backspacedelete键并且条件块不会执行任何return语句时,上述条件将失败。


如果值包含backspace(点)

,如何启用.

更改条件,如:

从条件

中删除&& decimalval.indexOf('.') >= -1
(event.which == 8 || event.which == 46) 

目标:是的,我的目标是不在输入中输入多个点(由@user)

完整代码

$('.decimalValidate').on('keyup', function(e) {
    var decimalval = $(this).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 (o.match(/\./g) && o.match(/\./g).length > 1) {
        $(event.target).val(o.replace(/\.$/, ''))
        return false;
    }
    if ((event.which > 47 && event.which < 58) || event.which == 8 || event.which == 46) {
        return true;
    }
    return false;
}

<强> Working sample