从取消验证输入字段获取jQuery值

时间:2014-12-16 19:50:31

标签: jquery html5 validation

我有一个类型编号的输入字段。它需要一个像21.5或0.1的数字,但它不会是21,5或0,1 我实际上并不关心分离器,因为我在php中处理它,但我不能使用Ajax发送它,因为它不是valide。 但我喜欢保持type =" number"强制mobiledevices显示num-pad。 所以我觉得在发送之前用点替换逗号应该很简单。但是我需要获得输入字段的值。

是否有方法可以获得价值,即使它没有验证?

<input type="number" pattern="[0-9]+([\.|,][0-9]+)?" min=0 step=0.1 id="numberinput" title="test"/>

http://jsfiddle.net/p0rdhnew/

document.getElementById('numberinput').value$('#numberinput').val()不起作用,请参阅小提琴中的示例。

2 个答案:

答案 0 :(得分:1)

首先,将您的事件处理程序放在document.ready块中。接下来,使用按键而不是更改文本框上的事件。最后,看起来该模式阻止了检索正确的值。一个肯定会起作用的解决方案是编写自己的事件处理程序来验证击键:

$("document").ready(function(){
    var regExPattern = "[0-9]+([\.|,][0-9]+)?"; //You will have to troubleshoot this
    $("#numberinput").keypress(function(e){
        if (!regExPattern.test($("#numberinput").val() + e.val()){
            e.preventDefault();
            return false;
            }
        else
            $("#out").text($("#numberinput").val() + e.val());
    });
});

此代码未经测试,但应该可以使用。希望其他人有更好的方法,但我认为这种模式是你的问题,在这里。我之前从未见过控件阻止你检索它的值。

<强>更新

以下是MaskDecimal函数示例:

function MaskDecimal(e) {
  var CurrentValue = $(this).val();
  var dotkey = [190, 46];   // try to catch inconsistent key mapping
  var commakey = [188, 44]; // see: http://unixpapa.com/js/key.html
  if (dotkey.indexOf(e.which ) > -1 || commakey.indexOf(e.which ) > -1) {
    if (CurrentValue.indexOf(".") > -1) {
        e.preventDefault();
        return false;
    }
    else if (CurrentValue == "") {
        $(this).val("0.");
        e.preventDefault();
        return false;
    }
    else if( commakey.indexOf(e.which ) > -1 ){
        $(this).val(CurrentValue +'.');
        e.preventDefault();
        return false;
    }
  }                       
  // allow only digits, backspace and enter:
  else if ((e.which < 48 || e.which > 57) && !(e.keyCode == 8 || e.keyCode == 13)) {
    e.preventDefault();
    return false;
  }
}

http://jsfiddle.net/p0rdhnew/4/

您可以将此MaskDecimal分配给您的文本框,如下所示:

$("#numberinput").on("keypress", MaskDecimal);

如果你把MaskDecimal函数放在哪里,请不要忘记在你的页面上引用你的JS文件!

答案 1 :(得分:0)

您可以收听keydown事件并阻止在键入非数字字符时设置值,以及用点替换逗号:

myInput.addEventListener('keydown', function(event) {
    // not 0-9
    if ( event.which < 48 || event.which > 57 ) {
        // comma:
        if ( event.which == 188 ) {
            this.value += '.';
        }
        event.preventDefault();
    }
});

上面的代码不支持小键盘和小数点以及值中间的逗号:

  

123 | 456 - &gt; (光标是|)用户按下, - &gt; 123456。