我不完全确定如何为此词组,所以我无法搜索它。基本上,我有一个keydown()
绑定在$(document)
。我想show()
另一个div,并将所有keydown事件重新路由到这个div,并防止在文档处理程序中触发。这甚至是可能的,还是我必须将所有主键绑定到另一个div并从那里开始工作?防止keydown()被文档绑定捕获
回答
e.stopPropagation
,或 e.preventDefault
(视情况而定) 凡e
是事件。
例:
function onKeyDown(e) {
doStuff();
e.preventDefault();
}
但我如何确保我新显示的div首先获得事件?否则,我的文档处理程序将停止传播,事件永远不会到达div。对? – 2012-03-14 16:31:48
@ElliotBonneville这是由事件冒泡处理。检查这个链接了解更多信息:http://www.quirksmode.org/js/events_order.html – 2012-03-14 16:33:58
“添加一个字符到输入”是一个'textinput'事件,如果'keydown' ,'keypress'或'keyup'被阻止。更好的quirksmode链接将是http://www.quirksmode.org/dom/events/keys.html – Sinetheta 2012-03-14 16:34:29
e.preventDefault()
将阻止事件的默认行为。你需要的是使用 e.stopPropagation()
,这样事件不会冒泡DOM结构。
$(element).keydown(function(e) {
// do the task
// allow the default behaviour also
e.stopPropagation();
//^. BUT stop the even bubbling up right here
});
e.stopProgation()
,可能有点混乱把握在第一,但我创建了一个demo与click事件来解释它。
希望它有帮助!
尝试:
$(document).on('keydown', function (evt) {
$('#foo').show().trigger(evt);
});
$('#foo').on('keydown', function (evt) {
console.log(evt);
return false; // this is very important. Without it, you'll get an endless loop.
});
我能想到的,甚至有比输入或文档以外的其他运行keydown事件的唯一办法,就是手动触发它。你可以有一个全局变量跟踪你的div是否显示,然后相应地触发你的div上的事件。
这里有一个这样的解决方案
HTML
<a href="#" onclick="showdiv();">Show div</a>
<div id="hiddendiv"></div>
的Javascript
var showing = false;
function showdiv()
{
showing = true;
$('#hiddendiv').show(200);
}
// Set up events on page ready
$(function() {
$(document).keydown(function(e) {
// If the div is showing, trigger it's keydown
// event and return
if(showing)
{
$('#hiddendiv').data('keydown_event', e).keydown();
return true;
}
alert('Document keydown! Keycode: ' + e.keyCode);
// Otherwise do the normal keydown stuff...
});
// Keydown for the hidden div
$('#hiddendiv').keydown(function() {
e = $(this).data('keydown_event');
alert('Hiddendiv keydown! Keycode: ' + e.keyCode);
// Make sure to stop propagation, or the events
// will loop for ever
e.stopPropagation();
return false;
});
});
正如你所看到的,#hiddendiv keydown事件是由文档keydown事件触发。我还使用jQuery数据函数将事件对象包含在隐藏div中。
- 1. 防止空文档被保存
- 2. 防止捕获NUnit AssertionException?
- 3. 文档keydown绑定不能用于输入字段
- 4. Haxe Javascript:防止'绑定'代?
- 5. 如何防止模态打开时文档中输入键的keydown事件?
- 6. 防止绑定功能不止一次
- 7. 防止终止最后一个文档
- 8. IOS防止touchmove事件被固定元素后面的主体捕获
- 9. 防止文件被覆盖
- 10. 防止下拉收盘的keydown
- 11. 防止其它变更事件的keydown
- 12. kendo编辑器:防止keydown不工作
- 13. 绑定ReactiveCommand可以防止ViewModel被垃圾回收
- 14. 如何防止PDF文档被下载到用户PC?
- 15. AvalonDock文档绑定
- 16. 如何防止被webpack捆绑的.js文件
- 17. 防止数字/列表被插入到LaTeX文档的特定部分中
- 18. PHP:防止嵌套try-catch捕获特定错误
- 19. 绑定防止Visio事件发生
- 20. Asp Gridview:如何防止空列绑定?
- 21. 如何防止绑定刷新
- 22. 防止SharePoint文档下载和打印
- 23. 如何防止文档使用更新
- 24. 使用react-keydown在内部组件中捕获keydown事件
- 25. 防止GTKMM捕捉异常
- 26. 只为当前页面捕获keyDown
- 27. 如何捕获标签的keydown事件?
- 28. KeyUp/KeyDown只能捕获一次
- 29. Keydown事件捕获数字键
- 30. 如何在KeyDown事件期间捕获文本框的文本?
可以b一些代码,将有助于回答更好。 – Starx 2012-03-14 16:37:02
我觉得这很清楚。另外,我还没有任何代码。这完全是理论上的猜测。 :) – 2012-03-14 16:38:48