我按下按钮时执行的功能
我不希望用户连续两次执行该函数。所以我使用了window
变量
我做了:
function a() {
if(window.infunction != undefined || window.infunction != null) {
return;
}
window.infunction = 'true';
//do stuff
}
在其他地方(按下另一个按钮)我重置:window.infunction = undefined
这是使用全局变量的正确方法(至少对我的需求而言)吗?
答案 0 :(得分:3)
不,没有充分的理由为此使用全局变量。只需将所有代码包装在函数中以避免污染全局命名空间就足够了:
(function() {
//all your code here
})();
但我认为更好的解决方案是在点击按钮时删除事件处理程序。这是一个例子:
HTML:
<button id="click_me">Click me</button>
JavaScript的:
function click_function() {
alert('You clicked the button with ID ' + this.id);
}
function click_listener() {
click_function.call(this);
this.removeEventListener('click', click_listener);
}
document.getElementById('click_me').addEventListener('click', click_listener);
或者,一些JS库可以轻松分配仅触发一次的处理程序。 事实上,我强烈推荐这个:你不必输入几乎相同的代码。例如,使用jQuery时,您只需编写:
$('#click_me').one('click', function() {
alert('You clicked the button with ID ' + this.id);
});
这与上面的代码完全相同,只是它与更多浏览器兼容,包括旧版本的IE。
答案 1 :(得分:3)
功能是对象。它们可以具有与任何其他对象类似的属性:
function a(){
if (a.executed) return;
a.executed = true;
//do stuff
}
正如@Ian在他的评论中提到的,你可以轻松地使函数可重用。这种做法既有利也有缺点。
正如@Dave所说,可以通过关闭来实现:
var a = (function (){
var executed = false;
return function (){
if (executed) return;
executed = true;
//do stuff
}
})();
答案 2 :(得分:0)
禁用该按钮或将其隐藏,以免用户在第一次点击后按钮无效的原因感到困惑。
function a(e) {
e = e || window.event;
e = e.target || e.srcElement;
// disable element
e.disabled = true;
}
你应该取消绑定事件。
function a(e) {
// unbind the event
e = e || window.event;
e = e.target || e.srcElement;
e.onclick = null;
}