2

AJAXを介してテキストエリアを生成し、それらのテキストエリアが変更された場合にイベントを発生させるページがあります。これは、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ソリューションで問題ありません。

ありがとう。

4

2 に答える 2

0

解決策は、AJAXでのonchangeイベントのハードコーディングに戻ることです。残念ながら、ドキュメントの監視(ぼかし/変更)はIE8以下では機能しません。私がコードを書くのが好きな方法ではありませんが、私が見つけた唯一の解決策です。

于 2012-09-07T15:14:34.150 に答える
0

AJAX応答の使用方法について詳しく説明する必要があります。以下は、Prototype.jsv1.7.1を使用するIE6で正常に機能します。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 に答える