2014-10-19 115 views
0

为什么onkeypress无法检测Backspace keyboard为什么onkeypress无法检测退格键盘?

第一,填补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> 
+1

因为'onkeypress'只在按下按键产生可打印字符时触发。 – Teemu 2014-10-19 16:57:12

+0

但我按下键'backspace'为什么onkeypress不工作? – 2014-10-19 16:58:59

+0

'backspace'不是可打印的字符。如果您想检测某些特定的键,请使用'onkeyup'。 – Teemu 2014-10-19 17:02:30

回答

0

也许,你的文字输入没有焦点,当你按下退格? $( '#INVALID_EMAIL')之后

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

秀();:

尝试添加这一点。

+0

如果在按下“backspace”时输入没有焦点,页面将在大多数浏览器中重定向。 – Teemu 2014-10-19 17:04:04

+0

@泰姆,是的。我建议,因为在我的FF样例jsfiddle中,通过按BackSpace触发该处理程序(按键)。 – dfionov 2014-10-19 17:07:09

+0

的确,它可以在FF中运行,但不能在IE或Chrome中运行。实际上'onkeypress'不是标准的一部分,实现因浏览器而异。一个“传统”的“onkeypress”行为是我在OP下面的评论中描述的。 – Teemu 2014-10-19 17:11:26