Событие jQuery onchange запускается дважды в IE8

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

<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 ответа

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

Когда вы устанавливаете 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

Другие вопросы по тегам