【问题标题】:Why onkeypress cannot detect Backspace keyboard?为什么 onkeypress 无法检测到 Backspace 键盘?
【发布时间】:2014-12-14 16:26:01
【问题描述】:

为什么onkeypress 无法检测到Backspace keyboard

首先,将xxxxxxxxxx填入输入文本,然后按submit button 你会看到红色文本invalid email address 并按backspace keyboard 删除输入类型文本中的一些字符,为什么onkeypress 在退格键盘上不起作用?

http://jsfiddle.net/btetyLwb/1/

<script>
function clear_email_valid_text() {
        $('#valid_email').hide();
        $('#invalid_email').hide();
}


function validateForm() {
    var newsletters_email = document.forms["form_validate_email_newsletters"]["newsletters_email"].value;
    var atpos = newsletters_email.indexOf("@");
    var dotpos = newsletters_email.lastIndexOf(".");
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=newsletters_email.length) {
        $('#valid_email').hide();
        $('#invalid_email').show();
        return false;
    }
    else {         
        $('#valid_email').show();
        $('#invalid_email').hide();
        return false;   
    }
}
</script>

【问题讨论】:

  • 因为onkeypress 仅在按下的键产生可打印字符时触发。
  • 但是我按下了键backspace为什么onkeypress不起作用?
  • backspace 不是可打印字符。如果您想检测某些特定键,请改用onkeyup

标签: javascript jquery keyboard


【解决方案1】:

也许,当您按 BackSpace 时,您的文本输入没有焦点?

尝试添加这个:

document.forms["form_validate_email_newsletters"]["newsletters_email"].focus();

$('#invalid_email').show();之后

【讨论】:

  • 如果在按下backspace时输入没有焦点,页面将在大多数浏览器中被重定向。
  • @Teemu,是的。我建议这样做,因为在我的 FF 中的示例 jsfiddle 中,此处理程序(按键)通过按 BackSpace 触发。
  • 确实,它在 FF 中有效,但在 IE 或 Chrome 中无效。实际上onkeypress 不是标准的一部分,并且实现因浏览器而异。 onkeypress 的“传统”行为是我在 OP 下方的评论中描述的行为。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2012-01-16
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多