javascript toUpperCase在firefox中不起作用

javascript toUpperCase not working in firefox

本文关键字:不起作用 firefox toUpperCase javascript      更新时间:2024-07-08

当前我正在尝试在javascript方法中的文本框中强制使用大写字母。此方法设置为在"keypress"事件中调用以进入文本框。

这是我的方法,改变为大写与IE和FF检测。

          //some code to detect the kind of key pressed based on numeric value, 
          //if lowercase detected then continue
        var key; 
        if(window.event){ //working IE code                     
                //key = window.event.keyCode;
                window.event.keyCode-=32;
        }
        else if(e){ //broken FF code
                key = String.fromCharCode(keycode).toUpperCase()
                e.value = e.value.toUpperCase();
        }

当前的代码表示e.value在firebug中未定义。如果我只尝试e.toUpperCase(),firebug会说toUpperCase不存在。我已尝试将e.value设置为"key",它不会返回错误,但不会更改为大写。我尝试过直接更改e.which,但当然,它是只读的,并返回一个错误。

我到底错过了什么?我相信问题在于,无论我在这里更改了什么,e.which仍然被设置为小写值,因为我无法以任何方式编辑它,所以原始的小写e.which字符被推到了文本框中。

我想我会用另一种方式:

function keypressHandler() {
  this.value = this.value.toUpperCase();
}
document.getElementById('whatever').onkeypress = keypressHandler;
// or use addEventListener or whatever

编辑实际上,它与以下黑客合作效果更好:

function keypressHandler(event) {
    var inp = this;
    setTimeout(function() {
        inp.value = inp.value.toUpperCase();
    }, 0);
}

这样就可以在值"固定"之前将导致事件的键添加到值中。

关键是,处理键盘事件非常混乱,而且浏览器之间的情况也不尽相同。上面的方法完全通过直接处理由浏览器维护的值来避免这种情况。

编辑—注意,为了让这里的代码工作,必须按照代码的方式设置事件处理程序。如果您在HTML标记的"onkeypress"属性中设置它,它必须是不同的:

<input onkeypress='keypressHandler.call(this)'>

KeyEvents没有value属性。您可能想要使用这个片段来检测按键,也可能想要阅读有关检测击键的内容。

还要注意,事件属性(通常)是只读的。您需要防止当前事件用不同的键触发一个额外的事件。

要将<input>元素中键入的所有内容都大写,不需要更改键事件。只需在字符出现后更改输入本身的值。为此,您需要监听keyup而不是keypress事件(请阅读原因):

inputEl.onkeyup = function(e) {
    this.value = this.value.toUpperCase();
};

(jsfiddle.net上的演示)。它很简单,适用于所有浏览器,唯一的缺点是当你按住一个键插入多个字符时,它不会立即大写(解决方法)。