【问题标题】:How to prevent '0' to be the first char entered in a textbox如何防止“0”成为文本框中输入的第一个字符
【发布时间】:2014-04-16 13:40:09
【问题描述】:

如何轻松防止0 成为使用 JavaScript 在文本框中输入的第一个字符?我想要.Net OnKeyDown() 之类的东西。当用户按下 0 键以阻止第一个字符

e.Handled = true;

为什么这不起作用?

function PreventFirstCharZero()
{
var TB = document.getElementById("idbox").value;
var TextLength = TB.value.length;

if (48 == event.keyCode && 0 == TextLength)
{
    event.preventDefault();
}
}

这行不通

function PreventFirstCharZero()
{
    if ('0' == document.getElementById("idbox")[0].value)
    {
        event.preventDefault();
    }
}

【问题讨论】:

  • 使用 onKeyPress="myFunction() 并处理 javascript
  • 在 myFuncion() 中确定 e.Handled = true 的 javascript 替代方案是什么;
  • event.preventDefault()

标签: javascript html character zero


【解决方案1】:

试试这个http://jsbin.com/sanoz/4/edit

document.getElementById('input').addEventListener('keyup', function(){
    if(this.value.charAt(0) === '0')
        this.value = this.value.slice(1);
});

您可以使用以下方法防止粘贴:

<input onpaste="return false;" id="input"/>

或者看看这个:detecting change in a text input box using jquery/javascript

【讨论】:

  • Vanilla JS 不是 jQuery
  • 有效,但如果您使用鼠标粘贴,它会让零保留。我建议重复完全相同的事情,但要监听 onchange 事件。
【解决方案2】:

老实说,阻止输入密钥不是一个好的解决方案,因为您始终可以复制/粘贴,并且事件不会触发。

如果我可以建议您使用其他解决方案,请使用 change(或 blur,因为更改显然不适用于所有浏览器)事件并删除第一个字符(如果它是 0):

document.getElementById('noZero').addEventListener('blur', checkZero)

function checkZero(){
    var val = this.value;
    if(val.charAt(0) === '0')
        this.value = val.slice(1), checkZero.call(this);
}

http://jsfiddle.net/F5ZSA/6/


如果您绝对想要一个按键事件,您可以将'change' 更改为'keyup',它会起作用,但仍然可以右键单击和粘贴而不会触发keyup 事件;

【讨论】:

  • 这看起来是迄今为止最好的解决方案,但您可能会将“更改”更改为 keyup。
  • @AamirAfridi 正如我在小提琴链接之后所说的那样:“如果你绝对想要一个关键事件,你可以将'change'更改为'keyup',它会起作用,但仍然会能够在不触发 keyup 事件的情况下右键单击和粘贴;"
  • 是的,但“更改”不起作用。至少它在 Chrome 中不适合我。
  • @AamirAfridi wierd,除了我刚刚纠正的一个小错误外,它对我来说工作正常(chrome 也是)。
  • @AamirAfridi 我不知道change 的兼容性,改成blur。但感谢您指出。
【解决方案3】:

简短而甜美的纯 JavaScript 单行代码:

<input onkeyup="if (event.srcElement.value.charAt(0) == '0') { event.srcElement.value = event.srcElement.value.slice(1); }" />

JsFiddle

【讨论】:

  • 它禁止在任何位置输入零
  • 我只需要在第一个位置禁用 0。纯失败
【解决方案4】:

试试这个!

$("#input").on("keypress keyup",function(){
    if($(this).val() == '0'){
      $(this).val('');  
    }
});

jsfiddle

【讨论】:

  • 当您先输入其他数字然后在开头输入零时,它会停留在那里
【解决方案5】:
<input type="text" onKeyUp="Prevent(this.value)" id="testInput" />

javascript

function Prevent(value) {
    var x = document.getElementById("testInput");
    if (value == 'O') {
        x.value = '';
    }
}

Demo Fiddle

【讨论】:

  • @AamirAfridi 它被配置为第一个字符不是大写 O 并且它不接受它。我在这里有什么遗漏吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多