jQuery .val()忽略尾随小数点

时间:2017-04-26 22:45:16

标签: javascript jquery html

我目前正致力于限制数字文本字段中的允许输入。我检查输入字段值的长度,如果它是> =到maxlength属性,则不要输入任何内容。

$('input[maxlength]').on('keyup', '', null, function(event) {
    var ref = $(this),
        val = ref.val();
    if ( val.length >= this.maxLength && event.which != 8){
        return false;
    }
}

但是,如果字段的当前值以小数结尾(例如" 4。"),那么val()方法返回" 4&#34 ;,这会抛出整个过程。如何在包含尾随小数点的同时读取输入字段的内容?

http://jsfiddle.net/n3fmw1mw/329/(输入' 4。'您将会看到我正在谈论的内容。)

编辑:我已经尝试过希尔先生的建议,现在我有了这个

$('input[maxlength]').on('keydown', '', null, function(event) { //enforce maxlength on all inputs, not just text inputs
    var ref = $(this);
    ref.attr('type','text');
    var val = ref.val();

    if ( val.length >= this.maxLength  && event.which != 8){
        ref.attr('type','number');          
        return false;
    }
    ref.attr('type','number');   
});

但是现在我的文本框中没有插入任何内容,即使调试并发现我们没有返回false。

1 个答案:

答案 0 :(得分:3)

由于您的输入类型是数字,因此会删除小数。将输入类型设置为文本。

<input type="text" id="textbox1"/>

这是http://php.net/manual/en/function.password-verify.php

修改

根据您无法更改来源的新要求,下面的代码应该指向正确的方向。

jQuery不允许您更改元素的类型。为此,您必须删除元素并在其位置添加正确的类型之一。下面的代码就是这样。

注意:为了使代码更具可重用性,我在您的元素中添加了一个类,然后使用该特定类编辑了所有元素。

// Add class to identify that element type needs changed
$("#textbox1").addClass("numberToText");

// Swap number type input with text
$('.numberToText').each(function() {
  $("<input type='text' />").attr({
    id: this.id,
    name: this.name,
    value: this.value
  }).insertBefore(this);
}).remove();

$("#textbox1").keyup(function() {
  $('#log').append("Value: " + $('#textbox1').val() + '<br/>');
});

$(".button").click(function() {
  $('#log').append("Value: " + $('#textbox1').val());
})

这是a working fiddle