如何在javascript中创建连续的监听器?

时间:2016-02-06 13:12:24

标签: javascript jquery

我正在学习,也许我的问题可以改写或重新措辞。

  1. 当我点击div =>变量=变量+ 1;
  2. 我想要的是什么时候变量=== 3',它是console.log('我是3)。
  3. 我的脚本没有做我想做的事情,但这是我的尝试。

    <script type="text/javascript">
    
        element = document.getElementById("id");
        variable=0;
    
        function loading(){
    
            element.addEventListener("click",function(){
            variable=variable+1;
            console.log(variable);
            });
    
        };
    
    
        function check(){
        if(variable===3){console.log('I am 3');};
    
        };
    
        loading();
        check();
    
    
        </script>
    

    每次点击对象时我应该调用check()吗?或者我应该创建一个监听器来每次调用check()&#39;变量&#39;在改变?还是另一种解决方案?

3 个答案:

答案 0 :(得分:2)

从事件处理程序中调用check

function loading(){
    element.addEventListener("click",function(){
        variable=variable+1;
        check();
        console.log(variable);
    });
}

check更改时,调用variable是变量的唯一选项。

如果你想在某些东西的价值发生变化的情况下进行检查,你可以使用对象属性,而不是使用setter:

var obj = (function() {
    var value = 0;

    return {
        get value() {
            return value;
        },
        set value(newValue) {
            value = newValue;
            if (value == 3) {
                console.log("I am 3");
            }
        }
    }
})();

然后:

function loading(){
    element.addEventListener("click",function(){
        obj.value = obj.value + 1; // Or ++obj.value;
        console.log(obj.value);
    });
}

每当您更改obj.value的值时,都会调用setter函数,因此您可以在那里进行检查。

请注意,这是ES5(2009)中添加的一项功能,因此在旧的JavaScript引擎中不存在,例如IE8中的引擎。

其他一些说明:

  1. 您的代码正在成为The Horror of Implicit Globals的牺牲品:声明您的变量。

  2. ;不要在功能声明的末尾进行操作。只是声明不以块结尾。

  3. 一致的缩进有助于提高可读性。

  4. variable = variable + 1;很好,但您也可以选择更简洁:++variable;

  5. 所以:

    var element = document.getElementById("id");
    var variable = 0;
    
    function loading(){
        element.addEventListener("click",function(){
            ++variable;
            console.log(variable);
            check();
        });
    }
    
    function check(){
        if (variable===3) {
            console.log('I am 3');
        }
    }
    
    loading();
    check();
    

答案 1 :(得分:0)

你几乎就在那里 - 只是你的支票不需要是一个单独的功能。

var element = document.getElementById("id");
var variable = 0;

function increment(variable) {
    variable++;
    console.log(variable);

    if (variable === 3) {
        console.log('I am 3');
    }
}


element.addEventListener("click", function(){increment(variable);}, false);

答案 2 :(得分:0)

试试这个:

&#13;
&#13;
var element = document.getElementById("id");
var variable = 0;

element.addEventListener("click", function(){
  
  variable += 1;
  
  check();

});


function check(){
  
  // for demo purposes, let's change the button text
  element.innerHTML = variable === 3 ? 'I am 3' : 'click';
  
  if(variable === 3)
    console.log('I am 3');

};

check();
&#13;
<button id="id">click</button>
&#13;
&#13;
&#13;

指针:

使用var在当前范围内声明新变量。