【问题标题】:JavaScript charAt() doesn't like user input that isn't zeroJavaScript charAt() 不喜欢不为零的用户输入
【发布时间】:2012-08-24 08:54:11
【问题描述】:

这可能是一个愚蠢的问题或错字,但我还是要问...我有以下表格,当提交表格时,我想检查 input type="number" 的所有值并确保如果用户出于某种原因在输入的开头放置了一个零,例如 01、025、0100,只要值不为零,就可以删除第一个零。使用 jQuery 选择器让一段简单的 JavaScript 变得更加容易。注意这里的所有文本框都是type="number" 而不是type="text" 请注意我的输入

这是我的代码:

$('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 个不具有零值的项目:

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

【问题讨论】:

  • 会不会是输入中有空格?
  • @nyarlathotep:把它作为答案,我会加一个你。输出显示“val:”和“04”之间的空格(作为最后一个示例)。
  • @nyarlathotep:把它作为答案
  • 是的,绝对是空间问题。
  • 作为旁注,您的代码是否处理多个零?乍一看,“001”的输入会被修剪为“01”,这可能不是我们想要的......

标签: javascript html


【解决方案1】:

您的值中似乎有空格。在比较之前对其进行修剪(例如,使用 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

【讨论】:

    【解决方案2】:

    这可以稍微减少:

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

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

    【讨论】:

    • 干净整洁,我喜欢它 :) 但我会在 0 之后加上一个 + 以使其同时删除多个前导零!
    • 还不知道前瞻,又学到了一些东西:D!
    • 是的——虽然I wrote a simulation for this,但在 JS 中没有后视,这非常烦人。好点回复:多个前导零 - 已编辑。
    【解决方案3】:

    由于某种原因,前面似乎有空格 - 在您的零检查之前使用 jQuery 的修剪功能以确保您已经消除了空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 2012-08-18
      相关资源
      最近更新 更多