仅运行一次jQuery事件处理程序

时间:2015-10-13 12:16:41

标签: javascript jquery

我尝试只使用一次jquery事件,我有以下功能:

function usrPlay() {
    var flag = true;
    while (flag === true) {
        $(".pincha").click(function() {
            console.log($(this).attr("value"));
            flag = false;
        });
    }
}

但是......似乎这是一个无限循环,但我不明白为什么。 有帮助吗?谢谢!!

2 个答案:

答案 0 :(得分:2)

jQuery有一个由.one()命名的函数。

您可以使用以下代码解决问题。

$(".pincha").one( "click", function(){ 
    console.log($(this).attr("value"));
});

有关.one()

的详细信息

http://api.jquery.com/one/

答案 1 :(得分:0)

  

但是......似乎这是一个无限循环,但我不明白为什么。

这是因为你只在循环中附加事件,事件处理程序不在循环内执行,因此flag不会变为false。
您可能需要全局usrPlay var而不是local var,因为事件处理程序不会在function usrPlay(){ window.flag = true; $(".pincha").click(function(){ if (window.flag === true){ console.log($(this).attr("value")); window.flag = false; } }); } 函数的范围内执行。试试这个:

Array.prototype.map
            .call(CKEDITOR.instances.editor1.document.getBody().$.childNodes,
                 function(item){
                  return item.innerText;
                  })
            .join("\n");