我的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' listener附加到具有不同值的按钮。因此,如果用户单击另一个具有不同值的按钮,则当前功能仍在执行中。我想运行函数doneEditDel如果' onmousedown'具有其他值的侦听器执行
答案 0 :(得分:0)
如果我理解正确,您想要取消在down功能中创建的计时器。如果是这样,您需要使doneEditDel函数可以访问计时器变量,例如,使其成为全局变量。然后,您可以通过在doneEditDel中调用clearTimeout(mousedown_timer)来清除计时器。
答案 1 :(得分:0)
存储先前的值并在您的向下功能中进行检查
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);
答案 2 :(得分:0)
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);
}
经过一些艰难的时间,从上面的代码的想法..我解决了它..谢谢伙伴:)
答案 3 :(得分:0)
您可以通过debouncing down()
功能一起避免此问题。如果在指定的时间范围内再次调用该函数,这将有效地取消先前对函数的调用。
请参阅引用文章中使用debounce实现的代码段。单击A并等待2秒,它将隐藏。在2秒内单击A然后B,B将在2秒后隐藏:
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)" />