这是我的两个功能,单击它工作正常,但在dblclick这两个函数执行,任何想法?我尝试使用live
而不是delegate
但仍然在dblclick
// Change Status on click
$(".todoBox").delegate("li", "click", function() {
var id = $(this).attr("id");
$.ajax({
//ajax stuff
});
return false;
});
// Double Click to Delete
$(".todoBox").delegate("li", "dblclick", function(){
var id = $(this).attr("id");
$.ajax({
//ajax stuff
});
return false;
});
答案 0 :(得分:5)
来自API文档:
不建议将处理程序绑定到同一元素的click和dblclick事件。触发的事件序列因浏览器而异,其中一些接收两个点击事件,另一些只接收一个。如果无法避免对单击和双击做出不同反应的界面,则应在单击处理程序中模拟dblclick事件。我们可以通过在处理程序中保存时间戳,然后将当前时间与后续点击时保存的时间戳进行比较来实现此目的。如果差异足够小,我们可以将点击视为双击。
我认为这意味着你要在超时处理程序中执行click
操作。如果再次单击,并且尚未发生超时处理程序,则取消超时并执行dblclick
代码。
答案 1 :(得分:1)
正如Pointy所指出的那样,同一元素上的click
和dblclick
可能很棘手,这里有一个实现如何使用setTimeout
“伪造”它:
var clickTimeout = false;
$('#element').click(function() {
if(clickTimeout !== false) {
// I'm doubleclick!
clearTimeout(clickTimeout);
clickTimeout = false;
} else {
clickTimeout = setTimeout(function() {
// I'm click!
clickTimeout = false;
}, 400);
}
});
基本上这意味着如果用户在400毫秒内再次点击同一个元素,那就是双击。请注意,在这种情况下,clickTimeout
变量是全局的并且将影响所有元素,因此如果用户在400毫秒内单击两个不同的元素,它可能会导致一些奇怪的行为,但这应该至少给你一些想法。