IE10和IE8中识别特殊字符的事件

events recognizing special characters in IE10 vs IE8

本文关键字:特殊字符 事件 识别 IE8 IE10      更新时间:2023-09-26

Stack Overflow上已经提供的答案不是我问题的解决方案。

我可以通过keycode检查特殊字符,但是 dot和delete都给出相同的键代码 46…

在这种情况下如何识别一个特殊字符?

function keypress(ev) 
    {
        if(ev.which == 0)
        {
            alert('pressed character is special handling character like del,Home,Navigation buttons, etc');
        } else {
            alert('pressed character is normal character');
        }
        if(ev.keycode){
            var k = ev.keycode;
            alert('ascii value of pressed character is ....' + k);
        }
    }

如果我使用IE8…电动汽车。如果按下的字符是特殊字符,它将变为零并进入'if'块并打印警报…否则它会转到'else'块…

但是在IE10中,它将'else'块总是用于特殊和正常字符…

令人惊讶的是,点和删除在IE10中具有相同的ascii值46 ..在keycode 'if'块的alert中打印相同的内容....

如何区分IE10中按下的正常字符和特殊字符.....

我建议使用onkeydown事件。如果我们使用它,event.which就会被识别出来。

区分.Delete按钮的工作演示。

HTML:

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

JS:

function keypress(event) 
{
    alert("something pressed..");
    alert("event.which = " + event.which);
    if(event.which === 46)
    {
        alert('Delete button pressed');
    } else  if(event.which === 190) {
        alert('. button pressed');
    }
}

EDIT:似乎.>在keydown事件中具有相同的键码190。为了识别在同一键上的这两个元素,我们需要跟踪Shift键是否被按下。

有一种方法:

var prevKey = "";
function keypress(event) 
{  
    if(event.which === 16)    // only Shift key
        prevKey = "Shift";
    if(prevKey === "Shift" && event.which === 190){    // Shift + . key
        alert("> key pressed");
        prevKey = "Something else";
    }       
}
演示工作