Javascript 当用户单击某个元素时:阻止默认操作,显示菜单,然后在单击菜单时恢复默认操作
目标 当用户单击某个元素(使用class=“menu”)时,不应执行默认操作。应向用户提供带有选项的菜单。单击某个选项后,应执行默认操作 问题 首先停止最初的点击事件是非常有问题的,因为在那之后似乎不可能恢复“默认行为”——有没有办法将事件延迟到用户点击菜单项为止 示例 我希望发生的事情:单击链接。菜单将附加到正文中。单击菜单选项。现在执行原始单击的默认行为(这意味着触发原始单击链接的单击事件并重定向到example.com) jsFiddle HTML、JS和CSS在此处:Javascript 当用户单击某个元素时:阻止默认操作,显示菜单,然后在单击菜单时恢复默认操作,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,目标 当用户单击某个元素(使用class=“menu”)时,不应执行默认操作。应向用户提供带有选项的菜单。单击某个选项后,应执行默认操作 问题 首先停止最初的点击事件是非常有问题的,因为在那之后似乎不可能恢复“默认行为”——有没有办法将事件延迟到用户点击菜单项为止 示例 我希望发生的事情:单击链接。菜单将附加到正文中。单击菜单选项。现在执行原始单击的默认行为(这意味着触发原始单击链接的单击事件并重定向到example.com) jsFiddle HTML、JS和CSS在此处: PS:如果你想知
PS:如果你想知道我需要这些功能做什么,这里有一些关于我心目中的应用程序的草率而糟糕的想法:www.scribd.com/doc/39573220/MyJsApp这是不可能的;您需要在代码中模拟默认行为
您可以将
location.href
设置为链接的href
这很容易实现,请查看以下内容:
//为单击链接的url创建容器
var事件\u href={};
功能创建菜单(选项){
$ul=$(“
”);
$ul.append(“”+options.header+” );
对于(var$i=0;$i'+options.choices[$i]+'');
}
返回$ul;
}
函数resumeClick(){
window.location.href=事件;
}
$('.menu')。单击('click',函数(e){
//保存事件数据
event_href=e.currentTarget.href;
e、 预防默认值()
$('#占位符ul')。删除();
创建菜单({
标题:“选择某物”,
选项:[‘项目1’、‘项目2’、‘项目3’]
}).appendTo(“#占位符”);
//在具有回调==恢复函数的菜单项上初始化侦听器
$('.menu项')。单击('click',函数(){
恢复单击();})
});
1。为什么这不可能?在让最初的点击事件发生之前,当然可以做一些事情。2.您的解决方案不会触发可能触发其他内容的本机单击事件。3.我宁愿不要尝试模拟行为,也不要为每种类型的元素触发所有适当的事件。Link=native单击+follow href。文本字段=本机单击+焦点。不断地。让最初的事件通过要好得多。@arex:1:事实并非如此。如果不冻结整个浏览器,则无法使单击处理程序阻塞。2.我意识到这一点。可以使用jQuery引发事件。3.你需要写很多代码。
// create container for url of clicked link
var event_href = {};
function createMenu(options) {
$ul = $('<ul></ul>');
$ul.append('<li class="menu-header">'+options.header+'</li>');
for (var $i = 0; $i < options.choices.length; $i++) {
$ul.append('<li class="menu-item">'+options.choices[$i]+'</li>');
}
return $ul;
}
function resumeClick(){
window.location.href = event_href;
}
$('.menu').click('click', function(e) {
// save event data
event_href = e.currentTarget.href;
e.preventDefault()
$('#placeholder ul').remove();
createMenu({
header: 'Choose something',
choices: ['Item 1', 'Item 2', 'Item 3']
}).appendTo('#placeholder');
// init listeners on menu items with callbacks == resume function
$('.menu-item').click('click', function(){
resumeClick();})
});