2

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

文本区域看起来像:

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

Javascript 看起来像:

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

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

谢谢。

4

2 回答 2

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);
    }
});

这只是几个额外的字符,而且更清晰。

于 2012-09-08T02:07:04.057 回答
0

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

于 2012-09-07T15:14:34.150 回答