IE8在textarea上更改事件监听器无法正常工作

时间:2012-09-07 02:26:26

标签: javascript prototypejs

我有一个页面,我通过AJAX生成textareas并触发事件,如果这些textareas被更改。这适用于IE9 +和其他浏览器,如Firefox,Chrome,Safari等。问题是IE8及以下。他们不会解雇变更事件。代码是:

Textarea看起来像:

<textarea name="answer8158" id="answer8158"></textarea>

Javascript看起来像:

document.observe('change', function(e, el) {
    if (el = e.findElement('textarea')) {
        //Do Something
    }
});

是否有解决方法使更改事件有效?我可以使用PrototypeJS或纯JavaScript解决方案。

感谢。

2 个答案:

答案 0 :(得分:0)

解决方案是回到AJAX中对onchange事件进行硬编码。遗憾的是,文档观察(模糊/更改)对IE8及以下版本不起作用。不是我喜欢编写代码,而是我找到的唯一解决方案。

答案 1 :(得分:0)

您应该详细解释如何使用AJAX响应,以下在使用Prototype.js v 1.7.1的IE 6中可以正常工作。我已经使用DOM和innerHTML来模拟你在使用AJAX响应时所做的事情:

<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">

document.observe('change', function(e, el) {
    if (el = e.findElement('textarea')) {
        alert(el.value);
    }
});

function addTextarea(el){
  var ta = document.createElement('textarea');
  ta.name = 'ta2';
  el.parentNode.insertBefore(ta, el.nextSibling);
}

function addTextarea2(){
  document.getElementById('s0').innerHTML = '<textarea></textarea>';
}
</script>

<textarea name="answer8158" id="answer8158"></textarea><br>
<button onclick="addTextarea(this);">Add using DOM</button><br>
<button onclick="addTextarea2();">Add using innerHTML</button><span id="s0"></span>

如果您以编程方式更改值并期望触发更改事件,则完全不同。顺便说一句,我会把观察者写成:

document.observe('change', function(e) {
    var el = e.findElement('textarea');
    if (el) {
        alert(el.value);
    }
});

这只是一些额外的字符,而且更清晰。