Событие изменения стрельбы в IE8 при программном изменении значения текстового поля - PullRequest
2 голосов
/ 31 августа 2011

У меня проблемы с JavaScript в IE8 (радость).

По сути, мне нужно преобразовать любые записи с отрицательным числом в определенном текстовом поле в положительное значение. Я полагаю, я бы сделал это так:

$('input[type="text"]').live('change', function () {
    var number = $(this).val();
    if (number < 0)
    {
        $(this).val(-number);
    }
});

Позже я делаю вещи, когда фокус текстового поля теряется:

$('input[type="text"]').live('blur', function () {
    // do stuff with textbox's _positive_ number
})

К сожалению, в IE8 , когда значение текстового поля изменяется (т. Е. Вы вводите -23 в текстовое поле), событие изменения запускается дважды, а событие размытия вообще не запускается. *

Другие современные браузеры этого не делают.

  1. Почему событие изменения вызывается дважды?
  2. Почему событие размытия не срабатывает?
  3. Как мне это исправить?

Идите сюда, чтобы увидеть это: http://jsfiddle.net/ajbeaven/AwZKM/

1 Ответ

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

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

$(this).val(-number);

снова вызывает событие изменения.Другая проблема, с которой вы сталкиваетесь, когда событие размытия не запускается, если я изменяю код на

$('input[type="text"]').change( function () {
    var number = $(this).val();
    if (number < 0)
    {
        $(this).val(-number);
    }
    alert('change');

});

$('input[type="text"]').blur(function () {
    alert('blur');
})

Это работает, что заставляет меня думать, что что-то происходит, когда события изменения и размытия связаны с .live.Извините, я не знаю много решений, может быть, кто-то может прийти с некоторыми идеями после прочтения этого.

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