Проблемы с FireFox и JavaScript (event.keyCode или event.charCode или event.which не работают) - PullRequest
0 голосов
/ 07 июля 2010

Я не знаю, что происходит на моем 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 ]

4 голосов
/ 07 июля 2010

Это работает в 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 голосов
/ 12 января 2012

У меня также была проблема с попыткой получить что-то подобное для 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.aspx (Default.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

Iя думаю, что другая отправка - намного более чистый код, но это показывает пример, чтобы получить функцию javascript по отдельному пути для работы.Обратите внимание, что путь к файлу .js для вас будет другим, я просто выбрал для этого местоположение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...