1

我使用以下函数进行十进制验证,它在 IE 和 Chrome 中运行良好。但在 Fire Fox 中无法运行。如果我在 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;
}
4

1 回答 1

2

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

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

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

在这里,container指向任何Static-element不会动态显示在 DOM 中的内容。

$(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不管用

backspace您正在处理delete以下情况:

(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;
}

工作样本

于 2012-06-29T09:22:17.707 回答