如何在IE8中检测文本输入的变化

6
我希望能检测文本输入框的变化。我尝试了以下方法,在Firefox中有效,但在IE 8中无效。
$('#taskSearch').bind('input', function() {
     alert($(this).val());
});
$('#taskSearch').live('input', function() {
    alert($(this).val());
});
$('#taskSearch').change(function() {
    alert($(this).val());
});

http://api.jquery.com/change/这是jQuery文档中关于change()方法的页面。 - nbrooks
顺便提一下,你忘了 )alert($(this).val(); => alert($(this).val()); 也许这就是它不起作用的原因。 - Ofir Baruch
你的文本框是 #taskSearch 吗? - nbrooks
7个回答

11
您可以在IE6+中使用onpropertychange
$("#taskSearch").on("propertychange", function(){
alert($(this).val());
});

1
这是所有IE8答案中唯一对我有用的事件,它似乎会在每次按键时触发多次。 - Malkin
小提示:在某些浏览器中,您不能使用“on(“propertychange change keyup”)”-带有空格分隔列表的多个事件。 - MoCapitan
1
$("#taskSearch").on("propertychange input", function(){}); 在现代浏览器和 < IE9 中运行良好。 - jonathanbell

3
以下解决方案适用于我在IE8和现代浏览器中使用"num"类型输入字段的按键、滚动或箭头按钮进行更改的情况:
$('#element').on('keyup change', function() {
  // do something
});

1
这个对我有用。虽然propertychange在过去对我有用,但它也会在用户更改其他属性(如disabled)时触发。我的AJAX函数在验证时会禁用然后重新启用文本框,这将反过来触发propertychange,导致非常令人沮丧的循环。这些事件为我解决了问题。 - dKen

2
最后一个(仅仅是最后一个)是正确的,但你缺少了一个右括号:
$('#taskSearch').change(function() {
    alert($(this).val());
});

.live()已经被弃用(并且语法不正确),.bind()的语法也不正确;事件名称应该是'change'而不是'input'。请参阅文档.change()


2
大多数浏览器中都有一个“input”事件,与“change”不同的是,在输入失去焦点之前就会触发它,因此这可能是OP想要使用的内容。 - Tim Down
@tim 谢谢,我不知道那个,我假设他是将其用作选择器。我不知道jQuery是否支持该事件,在任何情况下...它可以直接通过浏览器方法传递。这肯定可以解释为什么OP的代码在FF中运行但在IE中没有运行。 - nbrooks

1

0

在输入值更改时立即触发:

$('#example')on('keyup input', function(e){
    alert(e.type); // Displays 'keyup' in IE8, 'input' in browsers
});

(这是马克答案的变体)


0
$('#taskSearch').change(function() {
    alert($(this).val()); // not the extra brace I've added
});

应该可以正常工作。顺便说一下,请停止使用.live()


0

这将检测在IE8中按下键时的情况

$("#input").on('keyup', function (event) { alert('keypress'); });


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接