Событие jQuery onchange запускается дважды в IE8 - PullRequest
1 голос
/ 10 августа 2011

У меня есть следующий код:

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
</head>
<body>

    <script type="text/javascript">

        $(document).ready(function()
        {
            $('#test').bind("change", function()
            {
                alert(this.value);
                this.value = jQuery.trim(this.value);
            });
        });

    </script>

    <input type="text" id="test" />
    <br />
    <input type="radio" />
</body>
</html>

В IE8, если я введу какой-либо текст для «проверки» ввода и нажму «Tab», я получу предупреждающее сообщение дважды.

Ноесли я прокомментирую строку "this.value = jQuery.trim (this.value);"сообщение будет показано только один раз.

Почему это произошло?И как мне избежать двойного вызова обработчика onchange?

Ответы [ 2 ]

3 голосов
/ 20 января 2012

О проблеме сообщили в jQuery, и она была исправлена ​​с использованием последней базы кода.Об этом сообщалось на jQuery 1.4 - 1.6.4.

2 голосов
/ 10 августа 2011

Если для свойства value элемента формы задано другое значение, событие change запускается.

Итак, в вашем коде:

$('#test').change(function() {
    // This is executed whenever the `change` event fires
    // Setting a new value will trigger the `change` event again
    this.value = $.trim(this.value);
});

Кстати, вы, вероятно, хотите использовать событие input вместо change.Для этого есть плагин jQuery: https://github.com/mathiasbynens/jquery.oninput.js

...