【问题标题】:execute function just once只执行一次函数
【发布时间】:2013-06-01 19:52:21
【问题描述】:

我阅读了这个帖子并尝试使用 Ted Hopps 方法 Function in javascript that can be called only once

但似乎我无法使其正常工作。我想通过 onclick="function()" 在图像上创建一个带有 JS 的 div。但我只想这样做一次。

 function runOnce(f){           

    var executed = false;
    return function () {
        if (!executed) {
            executed = true;
         return f.apply(this,arguments);
        }
    };
}
function rollover() { 
var new1=runOnce(myfunction);
new1(1);
} 

function myfunction(){


var tr1 = document.createElement("tr1");
tr1.style.width = "50%";
tr1.style.height = "100%";
tr1.style.background = "red";
tr1.style.color = "white";
tr1.style.right= "0px"
tr1.style.top= "0px"
tr1.style.padding= "2%"
tr1.style.opacity= "0.6"
tr1.style.position = "fixed";
tr1.innerHTML = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum";

document.body.appendChild(tr1);



}

我从 onclick 调用翻转函数

<img class="trans01button" onclick="rollover(1)" src="images/backgroundfragments_03.jpg" alt="Translation games" >

我的问题是它仍然多次执行该函数。 我在这里做了一个 jfiddle http://jsfiddle.net/RE3fp/,但是当我的 Dreamweaver 版本工作时,我无法让它工作。我的意思是我什至无法使“myfunction” div 出现,而​​我的问题是每次单击图像时它都会执行。

【问题讨论】:

  • 在rollover 中,您每次都在创建一个新的runOnce,此时您应该使用runOnce(myfunction) 的结果作为单击时调用的函数。
  • 当然你不能,因为你的代码有错误。只看控制台。在这里你可以找到更新的 jsFiddle:jsfiddle.net/RE3fp/1
  • 出了什么问题我看不到。它说翻转未定义,但我看不出这两个小提琴的区别?

标签: javascript onclick


【解决方案1】:

您需要将此行:var executed = false; 移出runOnce 函数范围。

Workind DEMO

因为总是当你进入 runOnce 函数时你将你的标志设置为 false。

【讨论】:

  • 很高兴听到这个消息。你现在明白你提出了什么样的问题吗?
  • 我想是的,我每次都将 runOnce 初始化为 false,这意味着每次调用时它都必须执行。
猜你喜欢
  • 2013-05-22
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2021-02-18
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多