我有这样的代码:
function myfunc () {
alert('executed');
}
$('.classname').on('click' function () {
myfunc();
});
我想一次运行myfunc
。我的意思是,每当用户点击.classname
元素时,我都不想执行它。我想我需要将函数调用转换为条件。像这样:
if ( /* that function never executed so far */ ) {
myfunc();
}
我该怎么做?
答案 0 :(得分:2)
使用jQuery的最简单方法是使用.one
if (isset($row["prpop2"])) {
$prop2 = $row["prop2"];
}
function myfunc() {
alert('executed');
}
$('.classname').one('click', function() {
myfunc();
});
答案 1 :(得分:1)
您应该删除正在调用的函数中的事件侦听器:
function myfunc () {
alert('executed');
$('.classname').off('click', myfunc);
}
$('.classname').on('click', myfunc);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='classname'>Click Me</div>
不要像其他帖子描述那样设置一个全局变量 - 没有必要,然后你仍然在做一个不必要的函数调用。这样可以确保永远不再调用该函数,并且不会列出该事件。
答案 2 :(得分:1)
$( document ).ready(function() {
var hasBeenExecuted = false;
function myfunc () {
alert('executed');
hasBeenExecuted = true;
}
$('.classname').on('click' function () {
if(!hasBeenExecuted){
myfunc();
}
});
});
答案 3 :(得分:0)
var functionWasRun = false;
function myfunc () {
functionWasRun = true;
alert('executed');
}
$(document).ready(function() {
$('.classname').on('click', function () {
if (!functionWasRun) {
myfunc();
}
});
});
答案 4 :(得分:0)
我建议,作为全局变量的替代,为函数分配属性。
function myfunc () {
alert('executed');
myfunc.executed = true;
}
$('.classname').on('click', function () {
if(!myfunc.executed) {
myfunc();
}
});
这具有以相同方式工作的优点,同时不会不必要地污染全局范围。但是,如果skyline3000's answer适合您,那么您应该使用它,因为它更清洁,更明智。