【问题标题】:Prevent "DOT" for Input type number in Mobile Devices防止移动设备中输入类型编号的“DOT”
【发布时间】:2013-06-14 09:14:47
【问题描述】:

我正在使用带有 PhoneGap 的 jQueryMobile.. 目前我有一个问题..我搜索它但没有得到确切的答复。 我的问题是我想防止在文本框中输入 DOT。文本框用于输入 AGE。

<input type="number" class="form_textbox_half" data-role="none" id="age" pattern="[0-9]*">

及其按键事件;

$('#age').live('keypress', function(){preventDot(event)});

那么它的作用是

function preventDot(event) {
    alert(0);
    //var test = document.getElementById("#age");
    var key = event.charCode ? event.charCode : event.keyCode;
    $("#age").innerHTML = key;
    if (key == 46) {
        return false;
    }
}

但它不起作用..我想防止在文本框中输入 DOT。 我认为这是一个小问题.. :( 但没有得到解决方案..请帮助我!

【问题讨论】:

标签: javascript jquery validation jquery-mobile cordova


【解决方案1】:

解决了您的问题

FIDDLE

问题在于您没有使用preventDefault 来阻止keypress 事件的传播

修改后的方法如下所示:

function preventDot(event)
{
    alert(event.charCode)
    //var test = document.getElementById("#age");
    var key = event.charCode ? event.charCode : event.keyCode;  
    $("#age").innerHTML = key;
    if (key == 46)
    {
        event.preventDefault();
        return false;
    }    
}

【讨论】:

  • 不适用于移动设备。当您在移动设备中单击点时,按键事件本身不会触发。 :(
【解决方案2】:

我发现只有这个可以工作

$(".vinput").on("input change paste",
function filterNumericAndDecimal(event) {
    var formControl;
    formControl = $(event.target);
    var newtext = formControl.val().replace(/[^0-9]+/g, "");
    formControl.val(''); //without this the DOT wont go away on my phone!
    formControl.val(newtext);
});

但如果您需要包含点,请使用 [^0-9.] 作为正则表达式

【讨论】:

    【解决方案3】:

    你可以试试这个我用这个解决的代码

    function bindOnInputQuantity() {    
        $('.receiveQty').blur('input', function() {
        var sel = $(this);
        var selDel = $(this).next();
        if(sel.val() === '') {
            sel.val(0);
            sel.data('current', 0);
        } else {
            if(parseInt(sel.val()) > parseInt(selDel.val())) {
                alert('Receive Quantity Cannot More Then Delivery Quantity!');
                sel.val(sel.data('current'));
                sel.focus();
                return false;
            } else {
                sel.val(parseInt(sel.val()));
                sel.data('current', sel.val());
            }            
          }        
       });}                                                                            
    

    【讨论】:

      【解决方案4】:

      这样使用

      $('#age').live('keypress', function(event){preventDot(event)});
      

      See Demo

      【讨论】:

      • 这不会阻止使用提供的代码输入字符。
      • 不传递事件作为参数。你可以做那个功能
      • 仅替换原始问题代码中的那一行代码不会阻止您输入句号。您已经对原始问题的代码进行了很多修改,而不仅仅是该行,因此在您提供的上下文中,您的答案不起作用。
      猜你喜欢
      • 2018-01-31
      • 2013-11-26
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2013-06-30
      • 1970-01-01
      相关资源
      最近更新 更多