2010-07-06 48 views
0

我不知道我的Firefox上發生了什麼!FireFox和JavaScript問題(event.keyCode或event.charCode或event.which不起作用)

我的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)。

是什麼問題?

感謝在未來提前...

+0

每一件事工作正常IE8的 - 我的Firefox版本3.6.6 = – MoonLight 2010-07-06 20:18:42

+0

的問題來自於你,因爲你做的事:'的onkeyup = 「一個()」'。所以每次你只打一次電話。嘗試'IE'你會得到同樣的錯誤。 – 2010-07-06 20:20:10

回答

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> 

Btw。你可以很容易地通過使用Firebug發現這一點。它在控制檯中引發錯誤。

+0

感謝您的回答......解決了 – MoonLight 2010-07-06 20:47:39

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)現在包含以下子代碼:

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文件的路徑對您而言會有所不同,我只是爲此默認了一個位置。