【问题标题】:How do I get an input alert message to work only when imputing alphabets, not for numbers? Without letting any text tipped in如何让输入警报消息仅在输入字母时起作用,而不是数字?不让任何文字提示
【发布时间】:2017-04-14 05:26:08
【问题描述】:

如何让输入警报消息仅在输入字母时起作用,而不是数字?不让任何文字提示。 输入数字时不应该有警报,但输入字母时会收到警报。我也接受带有 JavaScript 标记的解决方案,但如果有 内联解决方案,那是首选。

此功能的问题在于,如果您像我一样快速自卸车,它会让您在框中输入文本。应该是不让任何文字提示

JavaScript:

<script language="JavaScript">
function checkInp()
{
    var x = document.forms["isnform04"]["areinp"].value;
    var regex = /^[0-9]+$/;
    if (!x.match(regex))
    {
        alert("no text here, input numbers only");
        return false;
    }
}
</script>

HTML:

<input type="text" name="areinp" size="30" value="" onChange="areCon()" onkeyup="return checkInp();">

请无查询解决方案。

更新:我也用过这个:

<input type="text" name="areinp" size="30" value="" onChange="areCon()" onkeyup="if (this.value=this.value.replace(/[^\d]/,'')) alert('no text here, input numbers only');">

【问题讨论】:

  • 请补充一下,你试过的。
  • 什么是“输入警报”和“文本提示”?此外,内联 JavaScript 是一种非常糟糕的做法,并且被广泛反对。
  • 为什么不使用type="number"
  • @ScottMarcus 我的意思是输入文本框中的警报。文本提示也意味着不让文本留在文本框中。

标签: javascript html input alert inline


【解决方案1】:

如果要取消事件,则需要使用preventDefault(),即禁止文本框接受非数字输入。这样您就不必为删除它而烦恼。但是,preventDefault() 不适用于 onkeyup。使用onkeydown

JS

function checkKey(e) 
{
    if (e.keyCode != 8 && // allow backspace
        e.keyCode != 46 && // allow delete
        e.keyCode != 37 && // allow left arrow
        e.keyCode != 39 && // allow right arrow
        (e.keyCode < 48 || e.keyCode > 57)) // allow numerics only
    {
        e.preventDefault();
    }
}

HTML

<input type="text" onkeydown="checkKey(event)" />

注意 - 在每次按键/向下/向上时提醒用户非常糟糕。简直烦人。避免!如上所示,静默阻止不需要的键。

【讨论】:

  • 您的解决方案也和我的一样有效,所以谢谢您,巧合的是,我们同时提出了一个解决方案。这就是为什么我给你 1 票,并且问题回答接受。
  • 为了让你的工作完全按照我的意愿工作,我在e.preventDefault() 之后添加了alert("Do not input text here, input numbers only.");。就像这个e.preventDefault() alert("Do not input text here, input numbers only."); 一样,它工作得非常完美,而且它比我的解决方案更短......谢谢......
  • 我仍然觉得每次按键都显示警报是一种糟糕的用户体验。如果您验证文本框的onblur 或提交按钮的onclickAlert 看起来会更好,因为它只会显示一次。您可以简单地在 HTML5 的文本框中使用 placeholder = "enter numerics only" 属性。
  • SeekLoad:如果您在每次击键时发出警报,您的用户绝对会选中“阻止此站点显示警报”选项,这意味着您故意设计自己的通知失败。使用控制台或元素(输入元素)来提供反馈。 (转发以通知合适的人,我向 Nikhil 道歉。)
  • @SeekLoad 是的。这将吸引用户而不是刺激。但当然,所有这一切,前提是您的要求是灵活的。
【解决方案2】:

onkeyup 属性中进行正则表达式测试。

onkeyup="if(/\D/.test(this.value)) alert('no text here, input numbers only')"

【讨论】:

  • 问题是我收到了警报,但它并没有删除我输入的文本。
  • 返回 false 以防止其更新
【解决方案3】:

通过玩耍和混合不同的代码,我自己找到了答案。我做了一个过滤器,只允许我在框中选择的字符,然后向它添加一条警告消息,然后 WHALA 就可以了。

这是我找到的答案:

JavaScript:

<script language="javascript" type="text/javascript">
function TextFilter(myfield, e)
{
    var key;
    var keychar;
    if (window.event)
    key = window.event.keyCode;
    else if (e)
    key = e.which;
    else
    return true;
    keychar = String.fromCharCode(key);

    if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
    return true;

    else if ((("0123456789.").indexOf(keychar) > -1))
    return true;

    else if ((keychar == ""))
    {
        if (myfield.value.indexOf(keychar) > -1)
        return false;
    }
    else
    return false;
}

function checkInp()
{
    var x = document.forms["isnform04"]["areinp"].value;
    var regex = /^[0-9]+$/;
    if (!x.match(regex))
    {
        alert("no text here, input numbers only");
        return false;
    }
}
</script>

HTML:

<input type="text" name="areinp" id="test" size="30" value="" onChange="areCon()" onkeypress="return TextFilter(this, event)" onkeyup="checkInp()">

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多