如果你有这样的事情:
someVar.click(function() {
$(this).something.happens.here;
$(this).something.else.happens.here;
$(this).something.happens.here.that.should.only.run.once;
});
函数内的第三行是否可以在页面上只运行一次?我能想出的唯一解决方案是单独编写:
someVar.one( "click", function() {
$(this).something.happens.here.that.should.only.run.once;
});
但我不想这样做,因为我宁愿将所有内容保存在一个函数中,主要是因为已在第一个单击范围中定义的变量。 谢谢你们。
答案 0 :(得分:1)
如果你需要同一个功能,你可以使用一个标志:
var shouldRun = true;
someVar.click(function() {
$(this).something.happens.here;
$(this).something.else.happens.here;
if (shouldRun) {
$(this).something.happens.here.that.should.only.run.once;
shouldRun = false;
}
});
答案 1 :(得分:0)
正如您所提到的,将事件与one
相关联是最优雅的解决方案。或者,您可以设置一个全局变量来指示该函数是否已经运行:
var functionHasRun = false
someVar.click(function() {
$(this).something.happens.here;
$(this).something.else.happens.here;
!functionHasRun && $(this).something.happens.here.that.should.only.run.once;
functionHasRun = true;
});
如果您不是全局变量的粉丝,可以在引发事件的元素上设置data
属性:
someVar.click(function() {
$(this).something.happens.here;
$(this).something.else.happens.here;
!someVar.data('functionHasRun') && $(this).something.happens.here.that.should.only.run.once;
someVar.data('functionHasRun', true);
});
答案 2 :(得分:0)
var track=true;
someVar.click(function() {
$(this).something.happens.here;
$(this).something.else.happens.here;
if(track)$(this).something.happens.here.that.should.only.run.once;
track=false;
});
答案 3 :(得分:0)
.one
将是我的用途,否则我只会使用一个我可以在执行后重新定义为空的函数。
var onlyrunonce = function(){
$(this).something.happens.here.that.should.only.run.once;
onlyrunonce = $.noop;
}
someVar.click(function(e) {
$(this).something.happens.here;
$(this).something.else.happens.here;
return onlyRunOnce.call(this,e);
});
答案 4 :(得分:0)
这应该适合你:
var handled = false;
someVar.click(function() {
$(this).something.happens.here;
$(this).something.else.happens.here;
if(!handled){
$(this).something.happens.here.that.should.only.run.once;
handled = true;
}
});