传播和Keydown的jQuery问题

时间:2011-09-18 21:21:19

标签: jquery

我之前得到了here的帮助,原因是传播问题,但我现在尝试在输入上使用HTML5 autofocus,现在我的代码中断了。

这是我正在使用的代码:

<script type="text/javascript">
var $j = jQuery.noConflict();

$j(':not(form)').keydown(function(event) {

    $j('form').keydown(function(event) {
        event.stopPropagation();
    });

    if(event.keyCode==82) {
        $j(document).trigger(location.href = '/?random')
    }
});
</script>

基本上,我设置了一些键盘导航。如果按R键,则会转到随机页面。

当用户在表单/输入框中键入时,我试图禁用该功能,原因很明显。当我尝试使用自动对焦时,此代码有效。如果您开始在页面加载中右键输入,并且您键入的第一个字母是R,则会转到随机页面。

如果先输入另一个字母,那么R将作为普通字母输入。我是这种东西的新手,所以任何帮助都非常感谢!感谢。

编辑:经过进一步测试,看起来问题可能不是自动对焦,但主要是当输入的第一个字母是R时,它就会出错。

2 个答案:

答案 0 :(得分:0)

你的选择器“not”不正确。

<script type="text/javascript">

$(document).ready(function(){
    $('body').keydown(function(event) {
        if(event.keyCode==82) {
            $(document).trigger(location.href = '/?random')
        }
    });
    $('input, textarea').keydown(function(){
        event.stopPropagation();
    });
});
</script>

答案 1 :(得分:0)

问题是,每次在任何其他元素上调用keydown时,您都会向表单元素添加keydown事件。

尝试一下..我改变了你的JS ......

http://jsfiddle.net/CAjNR/1/

以下是小提琴的代码:

HTML:

<form>
    <input type="text" autofocus />
    <input type="text" />
    <input type="text" />
    <input type="text" />
    <textarea></textarea>
    <div id="results">
    </div>
</form>

JS

var $j = jQuery.noConflict();

$j(document).keydown(function(event) {
    var key = event.keyCode | event.which;
    if(key==82) {
        $j('#results').append($j('<div>pressed: r</div>'));
    }
});
$j('input, textarea').keydown(function(event) {
   event.stopPropagation(); 
});