用于文档和另一个元素的jQuery选择器

时间:2011-11-13 01:46:30

标签: jquery jquery-selectors

我可以在jQuery中合并这些吗?我正在使用HotKeys插件。

$(document).bind('keydown', 'n', cycleNoise);
$(document).bind('keydown', 's', pickRandom);
$(document).bind('keydown', 'v', toggleTasks);
$(document).bind('keydown', 't', toggleTimer);
$(document).bind('keydown', 'up', hideTask);
$(document).bind('keydown', 'down', nextTask);
$('#duration').bind('keydown', 't', toggleTimer);
$('#duration').bind('keydown', 'n', cycleNoise);
$('#duration').bind('keydown', 's', pickRandom);
$('#duration').bind('keydown', 'v', toggleTasks);
$('#duration').bind('keydown', 'up', hideTask);
$('#duration').bind('keydown', 'down', nextTask);

换句话说,是否可以在同一个选择器中使用document'#duration'。以下似乎不起作用:

$(document + ',#duration').bind(...);

修改

我正在使用jQuery HotKeys插件。这样可以防止文本字段冒泡。我可以通过修改源来禁用此功能仅针对此特定文本框吗?如果是这样,请告诉我如何。

插件也合并了keydown事件,还是真的附加了12个单独的处理程序?我不太了解jQuery以便解决它。实现所需效果的最佳解决方案是什么(作用于热键,除非在文本框中 - 除了应该绑定热键的'#duration'之外)。

3 个答案:

答案 0 :(得分:2)

这也应该有用,

var keys = {
    'n': cycleNoise,
    's': pickRandom,
    ....
    ..
    ..
}

$.each(keys, function(key, callback) {
    $(document).add("#duration").bind('keydown', key, callback);
})

还要考虑ThiefMaster的回答。

答案 1 :(得分:1)

这应该有效:

$('body ,#duration').bind(...);

实际上,如果您绑定到文档,则无需绑定到任何其他内容。

正如其他人所指出的那样,你的keydown绑定语法也是错误的。

答案 2 :(得分:1)

由于事件冒泡,绑定到文档本身的事件处理程序将接收所有事件 - 因此您只需删除$('#duration')事件。

您的处理程序将触发所有键btw,您不能限制它们 - 您需要检查使用e.which按下了哪个键(假设处理程序函数的第一个参数名为{ {1}})在函数本身。