IE 8中的文本区域验证无效

时间:2014-03-27 05:29:57

标签: javascript jquery internet-explorer

我在所有浏览器中工作正常的textarea期望IE 8。

document.getElementById('verb').onkeypress = function validate(e) {

  if (String.fromCharCode((window.event) ? e.which : e.keyCode).match(/[A-Za-z0-9,\s]/) == null) {
    alert('Part Number answers must be entered in alphanumeric characters only. \n\nIf you are going to enter more than one Part Number, \nplease use a " , " comma and no space.');
    e.preventDefault();
  }
};

所以它是一个普通的textarea,其id为动词和In,我只想要空间,','和alphanum。 它不在IE 8中工作。不知道为什么有人可以帮忙。

4 个答案:

答案 0 :(得分:0)

您的功能检测失败,因为IE8中eundefined。尝试这样的事情:

.onkeypress = function validate(e) {
    var evt = e || window.event;
    if ((String.fromCharCode(evt.which || evt.keyCode)).match(/[A-Za-z0-9,\s]/) === null) {
        alert(...);
        if (evt.preventDefault) {
           evt.preventDefault();
        }
        evt.cancelBubble = true;
        evt.returnValue = false;
    }
} 

答案 1 :(得分:0)

改为使用此

document.getElementById('verb').onkeypress = function(e) {
 if (String.fromCharCode((window.event) ? e.which : e.keyCode).match(/[A-Za-z0-9,\s]/) == null) {
    alert('Part Number answers must be entered in alphanumeric characters only. \n\nIf you are going to enter more than one Part Number, \nplease use a " , " comma and no space.');
    e.preventDefault();
  }
};

永远不要将事件作为命名函数传递(我不会在IE8中运行,只需删除“validate”),也可以使用jQuery事件来缩短所有内容:

@RIK:这里有工作,有些清理,现在还可以:

$(function(){
    $("#myfield").on("keydown",function(e){
        var keyPressEvent = String.fromCharCode(e.keyCode);
        if (keyPressEvent.match(/[A-Za-z0-9,\s]/) == null) {
            alert('Part Number answers must be entered in alphanumeric characters only. \n\n'
                  +'If you are going to enter more than one Part Number, \n'
                  +'please use a " , " comma and no space.');
            e.preventDefault();
          }
    });
});

http://jsfiddle.net/JH2kp/

你可以考虑的其他事情,就是现在一天,使用IE8的人的比率非常低。截至2014年1月,IE8的市场份额仅占10.2%的总份额的3.8%,所以我认为你应该升级你的浏览器或者让你的客户知道升级到比IE8更兼容的IE9或10。 w3schools.com/browsers/browsers_explorer.asp

答案 2 :(得分:0)

要防止在IE中输入不在白名单中的字符,请收听keydown事件。

(其他浏览器也会返回keyCode onkeydown。)

您还需要将returnValue设置为false,IE8不会执行preventDefault。

function validate(e){
    e= e || window.event;
    var k= e.keyCode || '';
    if(/![A-Za-z0-9,\s]/.test(String.fromCharCode(k)){
        alert('Part Number blah...');
        if(e.preventDefault) e.preventDefault();
        else e.returnValue= false;
        return false;
    }
};
document.getElementById('verb').onkeydown= validate;

答案 3 :(得分:0)

这对我有用。不要为什么以上所有都不起作用

    document.getElementById('verb').onkeypress = function validate(e) {
    var evt = e || window.event;
    if(evt.which== 'undefined') console.log('which');else{console.log(evt.which)}
    if(evt.keyCode.match== 'undefined') console.log('key');else{console.log(evt.keyCode);}
     var code = evt.keyCode;
     console.log(code);
    if (/[A-Za-z0-9,\s]/.test(String.fromCharCode(code))) {
     console.log('inside');
    }else{
     alert('dddd');
        evt.returnValue = false;    
    }
}