JavaScript charAt()不喜欢非零的用户输入

时间:2012-08-24 08:54:11

标签: javascript html

这可能是一个愚蠢的问题或错字但我还是要问...我有以下表格,当提交表格时我想检查input type="number"的所有值并制作确保如果用户由于某种原因在输入开始时输入零,例如01,025,0100,则只要该值不为零就移除第一个零。使用jQuery选择器,一个简单的JavaScript变得更容易。请注意,此处的所有文本框均为type="number"而非type="text",请注意我的输入

enter image description here

这是我的代码:

$('input[type=number]').each(function(){
    // only if the string is not zero
    if(this.value.charAt(0) == "0" && this.value != "0"){
        this.value = this.value.substring(1);
    }   
});

然而,当我回来完全测试我的表单时,我注意到我的代码不起作用!所以我添加了以下内容来写入控制台以检查发生了什么:

console.log("typeof:" + typeof(this.value) + " " + this.id + " char:" + this.value.charAt(0) + " val:" + this.value )

这给了我以下输出,注意最后4个没有零值的项目:

enter image description here

当用户更改默认值为零时,为什么我没有收到this.value.charAt(0)

3 个答案:

答案 0 :(得分:4)

您的价值似乎有空格。在比较之前对其进行修剪(例如,使用jquerysee here,如果您不想仅为此包含jquery):

$('input[type=number]').each(function(){
    // only if the string is not zero
    var myval = $.trim(this.value);
    this.value = myval.replace(/^[0]+/g,"");

});

上述解决方案删除了​​任意前导零,该部分取自this answer to a similar question

答案 1 :(得分:3)

这可以减少一些:

$('input[type=number]').each(function() {
    this.value = this.value.replace(/^\s*0+(?=\d)/, '');
});

这将删除任何前导零,即使有前导空格(这可能是你的问题)。

答案 2 :(得分:1)

看起来由于某种原因存在前面的空格 - 在零检查之前使用jQuery的trim函数来确保你已经消除了空格。