javascript toUpperCase在firefox中不起作用

javascript toUpperCase在firefox中不起作用,javascript,asp.net,firefox,Javascript,Asp.net,Firefox,目前,我试图在javascript方法中强制文本框使用大写字母。此方法设置为在“按键”事件中调用,以进入文本框 下面是我使用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)

目前,我试图在javascript方法中强制文本框使用大写字母。此方法设置为在“按键”事件中调用,以进入文本框

下面是我使用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();
        }
当前代码表示firebug中未定义e.value。如果我试一下,e.toUpperCase()firebug说toUpperCase不存在。我尝试将e.value设置为“key”,它不会返回错误,但不会更改为大写。我已经尝试过直接更改e.which,但是当然,它是只读的,并且返回这样一个错误


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

我想我可以用另一种方式:

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)'>

没有
属性。您可能希望使用来检测密钥,也可能希望阅读有关的信息

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

要将
元素中键入的所有内容都大写,不需要更改键事件。只需在字符出现后更改输入本身的值。您需要收听
keyup
事件,而不是
keypress
事件:


()。它很简单,适用于所有浏览器,唯一的缺点是,当您通过按住键()插入多个字符时,它不会立即大写。

您试图通过更新事件对象的“value”属性来更改键吗?是吗?根据这个密码,是的。这不对吗?“value”属性不是按下的键吗?根据W3C规范和Mozilla文档,没有“value”属性。有一个“key”属性,但它是只读的。好吧,那么为了改变大小写,我应该改变什么呢?我所看到的关于firefox的一切是,我需要更改的所有内容都是只读的。inp.value=inp.value.toUpperCase();本质上是在做与我已经做的完全相同的事情,因此产生相同的“inp.value”是未定义的错误。不,它不相同-
inp
在我的代码中是对
DOM元素的引用,而不是事件。那么,为什么我在尝试使用toUpperCase()时会遇到“inp.value”或“this.value”或“e.value”是未定义的错误呢?您的代码正在编辑文本。就我而言,这件事。是的,我也能做同样的事情。问题是我留下了一个大写的inp.value,但原始输入字符仍然是小写的。您可能设置的事件处理程序与我发布的代码不同。你没有发布,所以我不确定。它当前设置为“onkeypress”Me.txtData.Attributes.Add(“onkeypress”,“return NT\u TextControls\u ValidateUpper(this,event);”),即允许我直接修改window.event.keycode值。我检测到他们击键很好。我需要更改Firefox的压力。Internet Explorer!=火狐。Firefox遵循W3C规范(大多数情况下都是这样),根据该规范,事件字段是只读的。我理解这一点。但它仍然没有回答我关于如何在firefox中将值编辑为大写的问题。有趣的是,好的,我来看看如何处理keyup事件。编辑不更改。。我想我应该指出,我的“onkeypress”检测是作为VB中文本框集的一个属性处理的。它不是(据我所知,我可能是错的)在HTML中输入的文本框的输入是。。。ValidateUpper是我发布的方法
inputEl.onkeyup = function(e) {
    this.value = this.value.toUpperCase();
};