FireFox和javascript问题(event.keyCode或event.charCode或event.which不起作用)

时间:2010-07-06 20:16:51

标签: asp.net javascript events

我不知道我的firefox上发生了什么!

我的aspx和javascript代码是这样的:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function a() {
            alert('a');
            //alert(event.which);
            //alert(event.keyCode);
            //alert(event.charCode);
        }
        function b() {
            alert('b');
            //alert(event.which);
            //alert(event.keyCode);
            //alert(event.charCode);
        }
        function c() {
            alert('c');
            //alert(event.which);
            //alert(event.keyCode);
            //alert(event.charCode);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server" onkeyup="a()"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server" onkeydown="b()"></asp:TextBox>
        <asp:TextBox ID="TextBox3" runat="server" onkeypress="c()"></asp:TextBox>
    </div>
    </form>
</body>
</html>

当我在文本框1,2,3中键入内容时,我只看到第一个警报(意思是a,b,c)。

问题是什么?

感谢未来的进步......

2 个答案:

答案 0 :(得分:4)

它适用于IE,因为event是一个全局变量。

在Firefox中,事件对象被传递给事件处理程序,因此您必须使该函数接受一个参数:

function a(event) {
    event = event || window.event // IE does not pass event to the function
    alert('a');
    alert(event.which);
    alert(event.keyCode);
    alert(event.charCode);
}

在你的HTML中,你必须写:

<asp:TextBox ID="TextBox1" runat="server" onkeyup="a(event)"></asp:TextBox>

顺便说一下。你可以通过使用Firebug轻松发现这一点。它在控制台中抛出错误。

答案 1 :(得分:0)

我还试图为FireFox和IE获取类似的功能。对我有用的是使用关键字event作为函数调用某个javascript函数的输入参数。

我想要的是启动一个新的.js文件,该文件将保存我的所有javascript,以便我的所有表单都可以调用其中的函数。我的实现只允许从文本输入框中使用数字,字母和短划线,CR和BS键。这是我用过的javascript代码:

//This function filters out character inputs from client-side
//that do not include a-z, A-Z, 0-9 and '-' (dash) and backspace
function charFilter(event) {

  event = event || window.event || event.which || event;
  //alert(event);
  var unicode;
  if (event.charCode) unicode = event.charCode;
  else if (event.which) unicode = event.which;
  else if (event.keyCode) unicode = event.keyCode;
  else if (event) unicode = event;


  // unicode must be:      0-9       OR                A-Z             
  OR                a-z              OR        -      OR        BS    OR        CR    
  if ((unicode > 47 && unicode < 58) || (unicode > 64 && unicode < 91) || (unicode > 96 && unicode < 123) || unicode == 45 || unicode == 8 || unicode == 13) {
    return true;
  }
  else return false;
}

运行表单Default.aspxDefault.aspx.vb)的代码现在包含以下Sub:

    Protected Sub Page_load(ByvVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'some code

    'Filter characters in text search field (client side)
    Dim t As Type = Me.GetType()
    Me.Page.ClientScript.RegisterClientScriptInclude("t", ResolveUrl("~/JScript.js"))
    txtSearch.Attributes.Add("OnKeyPress", "return charFilter(event)")

    'rest of code

    End Sub

我认为其他提交的代码要干净得多,但这显示了一个将javascript函数放在单独路径中的示例。请注意,.js文件的路径对您来说会有所不同,我只是选择了默认位置。