Javascript只侦听最后一个指定节点上的事件

Javascript只侦听最后一个指定节点上的事件,javascript,for-loop,addeventlistener,Javascript,For Loop,Addeventlistener,所以我正在开发一个简单的gui。问题在于,似乎只有最后一个textarea受脚本影响。前面的所有步骤都没有任何反应。(查看屏幕截图) document.addEventListener(“DOMContentLoaded”,函数(){ //交互式文本区 var txta=document.getElementsByTagName('textarea'); 对于(变量i=0;i

所以我正在开发一个简单的gui。问题在于,似乎只有最后一个
textarea
受脚本影响。前面的所有步骤都没有任何反应。(查看屏幕截图)

document.addEventListener(“DOMContentLoaded”,函数(){
//交互式文本区
var txta=document.getElementsByTagName('textarea');
对于(变量i=0;i
截图():


Html只是几个简单的
textarea
,其值全部在Html中指定。

函数中的闭包:

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);
document.addEventListener(“DOMContentLoaded”,函数(){
//交互式文本区
var txta=document.getElementsByTagName('textarea');
对于(变量i=0;i


注释:您需要闭合变量earse内部循环。因为每一步你都会改变这个变量。

我们真的需要一个标准问题来链接这些问题。它们一天出现几十次。我仍然不明白为什么我需要“闭合可变内环”。它应该只是工作,因为每次都应该覆盖变量。@Johnny-Well,
earse===txta[txta.length]
在执行事件处理程序时。在Mihail的代码中,
earse
作为参数传递给匿名函数。
for
循环无法更改此参数(它在匿名函数中是本地的),您可以在事件处理程序中保留迭代时的值
earse
。我知道他正在将earse传递给匿名函数。我不明白的是为什么没有它就不能工作。用javascript解释这段代码有什么不同。在我的例子中,它应该是这样的:earse就是这样,添加事件监听器-3次。在带参数的匿名函数中,每个textarea都有自己的earse变量。
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);