描述
在我们的社区网站上,每个用户的昵称都是指向其个人资料页面的链接,但如果双击昵称,则会在昵称下方显示该用户的菜单。此弹出菜单的内容是使用 ajax 调用加载的。到目前为止,我们在锚点 href 中使用了“javascript:”,并使用 JS 捕获了单击/双击。我们希望清理 href 并添加正确的 url 以允许用户在选项卡等中打开配置文件链接,同时仍保留双击菜单。我意识到这不是最好的设计,它只是变得有点痴迷于工作。
问题
所以我希望单击正常(将浏览器发送到 href),而双击 preventDefault 并调用自定义函数(事件)。我可以通过在单击部分中使用 window.location 来做到这一点,但这感觉就像我想要改进的妥协/黑客。
到目前为止的代码
使用问题 1067464中的答案1067484(不允许发布链接)作为以下内容的基础
jQuery(document).ready(function($) {
$("#hello")
.bind('click', singleClick)
.bind('dblclick', doubleClick);
});
function singleClick(e) {
e.preventDefault();
var el = this;
setTimeout(function() {
var dblclick = parseInt($(el).data('double'), 10);
if (dblclick > 0) {
$(el).data('double', dblclick-1);
} else {
$('#result').html('click registered - browser should proceed to url');
// Attempting to make browser follow original href url:
$(el).unbind('click', singleClick);
}
}, 300);
}
function doubleClick(e) {
$(this).data('double', 2);
e.preventDefault();
$('#result').html('double-click registered - browser should stay here');
// Display dblclick popup-menu here
}
(在http://jsbin.com/iboyo5/2现场查看/编辑)
我只缺少这个单击部分,我想要一种比 window.location 更“干净”的方式,这就是为什么我要摆弄 .unbind() - 这也不是 100% 的解决方案。.unbind() 函数可以满足我的要求,但它不会为当前运行的代码卸载处理程序,因此每两次单击它只能工作一次。这是我现在需要解决的问题。
顺便说一句:我不介意第一次 .click 是否暂停设置延迟。在 url “启动”之前必须等待 300 毫秒是没有问题的。
我将不得不放弃这个并使用window.location吗?可以使用 .live() 和 .die() 解决吗?
希望我在这里的第一篇文章之前做了足够好的研究。谢谢!