Evento de cambio de activación de IE8 cuando se cambia programáticamente un valor de cuadro de texto

Tengo algunos problemas de javascript IE8 (alegría).

Básicamente, necesito convertir cualquier entrada numérica negativa en un determinado cuadro de texto a un valor positivo. Supongo que lo haría así:

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

Más tarde hago cosas cuando se pierde el foco del cuadro de texto:

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

Desafortunadamente con IE8 cuando se cambia el valor del cuadro de texto (es decir, ingresa -23 en el cuadro de texto), el evento de cambio se activa dos veces y el evento de desenfoque no se activa en absoluto.

Otros navegadores modernos no hacen esto.

  1. ¿Por qué el evento de cambio se activa dos veces?
  2. ¿Por qué no se activa el evento de desenfoque?
  3. ¿Cómo lo soluciono?

Vaya aquí para ver cómo sucede esto: http://jsfiddle.net/ajbeaven/AwZKM/

preguntado el 30 de agosto de 11 a las 23:08

Es una pena que jsfiddle no funcione correctamente en IE, pero solo veo un evento de cambio que se activa allí. UPD: lo siento, olvidé ingresar negativas -

1 Respuestas

Cuando configura el value propiedad de un elemento de formulario a un valor diferente, el change el evento se dispara en IE8, por lo que esta línea

$(this).val(-number);

activa el evento de cambio de nuevo. El otro problema que tiene con el evento de desenfoque no se activa, si cambio el código a

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

});

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

Funciona, lo que me hace pensar que algo está sucediendo cuando los eventos de cambio y desenfoque están vinculados con .live. Lo siento, no conozco mucha solución, tal vez a alguien se le ocurran algunas ideas después de leer esto.

Respondido 31 ago 11, 03:08

De hecho, funciona incluso si uno de los eventos está vinculado con live - unclenorton

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.