如果函数获得新值,则停止该函数
Stop a function if the function got new value
我的 javascript 功能需要帮助
如果用户单击具有此事件侦听器的元素...
onmousedown="down('+j+')"
此函数接收 'j' 作为回调...
function down(j) {
mousedown = true;
mousedown_timer = setTimeout(function () {
if(mousedown) {
$('#del'+j).show();
$('#ed'+j).show();
$('#clock'+j).hide();
$('#doneButton'+j).show();
navigator.vibrate(50);
}
}, 300);
}
如果 'j' 的值已更改,我正在尝试 运行 此函数...
function doneEditDel(d){
$('#doneButton'+d).hide();
$('#del'+d).hide();
$('#ed'+d).hide();
$('#clock'+d).show();
}
'onmousedown' 侦听器附加到具有不同值的按钮。因此,如果用户单击另一个具有不同值的按钮,则当前功能仍在执行。我想要 运行 function doneEditDel if 'onmousedown' listener with the other value execute
如果我没理解错的话,你想取消你在 down 函数中创建的定时器。如果是这样,您需要通过使其成为全局变量来使 doneEditDel 函数可以访问计时器变量。然后,您可以通过在 doneEditDel.
中调用 clearTimeout(mousedown_timer) 来清除计时器
存储之前的值并在你的向下函数中检查它
var prevJ = null;
function down(j) {
if(prevJ !== null && prevj !== j) {
clearTimeout(mousedown_timer);
doneEditDel(j) // I think that is what you wanted to happen
return;
}
prevJ = j;
mousedown = true;
mousedown_timer = setTimeout(function () {
if(mousedown) {
$('#del'+j).show();
$('#ed'+j).show();
$('#clock'+j).hide();
$('#doneButton'+j).show();
navigator.vibrate(50);
}
}, 300);
var prevJ = null;
function down(j) {
if(prevJ !== null && prevJ !== j) {
doneEditDel(prevJ); // I think that is what you wanted to happen
}
prevJ = j;
mousedown = true;
mousedown_timer = setTimeout(function () {
if(mousedown) {
$('#del'+j).show();
$('#ed'+j).show();
$('#clock'+j).hide();
$('#doneButton'+j).show();
navigator.vibrate(50);
}
}, 300);
}
经过上面代码的一些困难之后..我解决了它..谢谢伙伴:)
您可以通过 debouncing 和 down()
功能一起避免这个问题。如果在指定的时间范围内再次调用该函数,这将有效地取消对该函数的先前调用。
请参阅参考文章中使用去抖实现的代码段。单击 A 并等待 2 秒,它将隐藏。 2秒内点击A再点击B,2秒后B会隐藏:
function down(event) {
//no need for timeout
$(event.target).hide();
}
var debouncedDown = debounce(down, 2000); //create instance to use across handlers
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" value="Button A" id="button-a" onmousedown="debouncedDown(event)" />
<input type="button" value="Button B" id="button-b" onmousedown="debouncedDown(event)" />
我的 javascript 功能需要帮助
如果用户单击具有此事件侦听器的元素...
onmousedown="down('+j+')"
此函数接收 'j' 作为回调...
function down(j) {
mousedown = true;
mousedown_timer = setTimeout(function () {
if(mousedown) {
$('#del'+j).show();
$('#ed'+j).show();
$('#clock'+j).hide();
$('#doneButton'+j).show();
navigator.vibrate(50);
}
}, 300);
}
如果 'j' 的值已更改,我正在尝试 运行 此函数...
function doneEditDel(d){
$('#doneButton'+d).hide();
$('#del'+d).hide();
$('#ed'+d).hide();
$('#clock'+d).show();
}
'onmousedown' 侦听器附加到具有不同值的按钮。因此,如果用户单击另一个具有不同值的按钮,则当前功能仍在执行。我想要 运行 function doneEditDel if 'onmousedown' listener with the other value execute
如果我没理解错的话,你想取消你在 down 函数中创建的定时器。如果是这样,您需要通过使其成为全局变量来使 doneEditDel 函数可以访问计时器变量。然后,您可以通过在 doneEditDel.
中调用 clearTimeout(mousedown_timer) 来清除计时器存储之前的值并在你的向下函数中检查它
var prevJ = null;
function down(j) {
if(prevJ !== null && prevj !== j) {
clearTimeout(mousedown_timer);
doneEditDel(j) // I think that is what you wanted to happen
return;
}
prevJ = j;
mousedown = true;
mousedown_timer = setTimeout(function () {
if(mousedown) {
$('#del'+j).show();
$('#ed'+j).show();
$('#clock'+j).hide();
$('#doneButton'+j).show();
navigator.vibrate(50);
}
}, 300);
var prevJ = null;
function down(j) {
if(prevJ !== null && prevJ !== j) {
doneEditDel(prevJ); // I think that is what you wanted to happen
}
prevJ = j;
mousedown = true;
mousedown_timer = setTimeout(function () {
if(mousedown) {
$('#del'+j).show();
$('#ed'+j).show();
$('#clock'+j).hide();
$('#doneButton'+j).show();
navigator.vibrate(50);
}
}, 300);
}
经过上面代码的一些困难之后..我解决了它..谢谢伙伴:)
您可以通过 debouncing 和 down()
功能一起避免这个问题。如果在指定的时间范围内再次调用该函数,这将有效地取消对该函数的先前调用。
请参阅参考文章中使用去抖实现的代码段。单击 A 并等待 2 秒,它将隐藏。 2秒内点击A再点击B,2秒后B会隐藏:
function down(event) {
//no need for timeout
$(event.target).hide();
}
var debouncedDown = debounce(down, 2000); //create instance to use across handlers
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" value="Button A" id="button-a" onmousedown="debouncedDown(event)" />
<input type="button" value="Button B" id="button-b" onmousedown="debouncedDown(event)" />