以编程方式更改文本框值时,IE8触发更改事件

时间:2011-08-30 23:07:28

标签: javascript jquery internet-explorer-8

我有一些IE8 javascript问题(欢乐)。

基本上,我需要将某个文本框中的任何负数条目转换为正值。我想我会这样做:

$('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),更改事件会被触发两次,并且根本不会触发blur事件。< / p>

其他现代浏览器不这样做。

  1. 为什么更改事件会被触发两次?
  2. 为什么模糊事件没有触发?
  3. 我该如何解决?
  4. 到这里来看看这件事:http://jsfiddle.net/ajbeaven/AwZKM/

1 个答案:

答案 0 :(得分:2)

当您将表单元素的value属性设置为其他值时,{8}中的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绑定时会发生一些事情。对不起,我知道的解决方案不多,也许有人在看完这篇文章之后可以提出一些想法。