0

だから私は単純なGUIに取り組んでいます。問題は、最後だけtextareaがスクリプトの影響を受けるように見えることです。以前のすべてはまったく反応しません。(スクリーンショットを確認してください)

document.addEventListener("DOMContentLoaded", function (){

// Interactive textareas
var txta = document.getElementsByTagName('textarea');
for (var i = 0; i < txta.length; i++){
    var earse = txta[i].value;
    console.log(earse); // debugging
    txta[i].addEventListener('focus', function(e){
        if (e.target.value === earse) {
            e.target.value = "";
            e.target.addEventListener('blur', function(e){
                if (e.target.value === "") {
                    e.target.value = earse;
                }
            }, false);
        }
    }, false);
    console.log(txta[i]); // debugging
};

}, false);

スクリーンショット ( http://i.imgur.com/HTsMypB.jpg ):スクリーンショット

textareaHtml は、値がすべて html で指定された単純なです。

4

1 に答える 1

1

関数内の閉鎖:

document.addEventListener("DOMContentLoaded", function (){

// Interactive textareas
var txta = document.getElementsByTagName('textarea');
for (var i = 0; i < txta.length; i++){
    var earse = txta[i].value;
    console.log(earse); // debugging
    (function(earse){
            txta[i].addEventListener('focus', function(e){
                    if (e.target.value === earse) {
                            e.target.value = "";
                            e.target.addEventListener('blur', function(e){
                                    if (e.target.value === "") {
                                            e.target.value = earse;
                                    }
                            }, false);
                    }
            }, false);
        })(earse);
    console.log(txta[i]); // debugging
};

}, false);

http://jsfiddle.net/WjV8n/

コメント: ループ内のクロージャー varible earseが必要です。すべてのステップでこの変数を変更するためです。

于 2013-07-26T23:09:09.223 に答える