如果焦点在其他元素上,则keydown事件不起作用

时间:2015-11-25 10:56:56

标签: javascript jquery javascript-events bind keydown

我的表单分别有多个文本框,下拉列表和一个复选框。我想提交此表格如果我进入' S'键盘上的按钮。 复选框不是必填字段,下拉后下一个焦点转到复选框,如果我输入S,则keydown处理程序无效。

以下是我的keydown处理程序代码,我保存在document.ready()方法中:

$('#submitBtn').bind('keydown', 's', function() {
    alert("S pressed");
    $('#myForm').submit();
});

当焦点在提交按钮上时,只有它工作,如果我将焦点移动到其他元素然后它不会。我是JQuery / Javascript的新手,所以不知道为什么它不起作用。

我无法提供完整的HTML,以下标记非常相似:

<html>
    <body>
        <script src="C:/Desktop/test/jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $('#saveBtn').bind('keydown', 's', function() {
                    alert("S pressed :: SaveInfo() function call");
                    //SaveInfo() function call
                });
            });
        </script>
        <div id="saveInfo">
            <ul >
                <li>
                    <div>
                        <input type="text" maxlength="30" tabindex = "1" />
                        <br>
                        <input type="text" maxlength="30" tabindex = "2" />
                        <br>
                    </div>
                </li>
            </ul>
            <ul>
                <li>
                    <div>
                        <input type="checkbox" id="checkBox1" value="false" tabindex ="3"/>
                    </div>
                </li>
                <li>
                    <div>
                        <input type="button" name="saveBtn" id="saveBtn" value="Save" tabindex ="4"/>
                    </div>
                </li>
            </ul>
        </div>
    </body>
</html>

5 个答案:

答案 0 :(得分:1)

根据您更新的问题:

您希望在有{&#39}的情况下触发form.submit()事件。从键盘按下

尝试FIDDLE

它服务于问题,您实际上是将keypress事件绑定到#submitBtn,但是对于目标完整表单,您必须定位表单上的所有DOM元素。

只需从选择document作为选择器(如下面的

)即可实现此目的
$(document).ready(function() {
                $(document).bind('keydown', 's', function() {
                    alert("S pressed :: SaveInfo() function call");
                    //SaveInfo() function call
                });
});

希望它能解决您的问题。

由于

答案 1 :(得分:0)

试试这个

$(document.body).bind('keydown', 's', function() {
    alert("S pressed");
    $('#myForm').submit();
});

答案 2 :(得分:0)

我很瘦,这很正常。您将keyDown事件放在按钮上,这就是为什么keDown事件仅在您的按钮上。尝试替换

$('#submitBtn').bind('keydown', 's', function() {
   alert("S pressed");
   $('#myForm').submit();
});

通过

$(document).bind('keydown', 's', function() {
   alert("S pressed");
   $('#myForm').submit();
});

在这种情况下,keyDown事件在您的所有页面上,而不仅仅在按钮中。

答案 3 :(得分:0)

对于jquery bind()方法,请参阅一次,您可以发现第二个参数是&#34;包含将传递给事件处理程序的数据的对象&#34;。因此,您可以传递该参数中的任何内容,该参数可用于触发的每个keydown事件。

试试此代码

$(document).bind('keydown', '', function(e) {
    if (e.keyCode == 83) {
        $('#myForm').submit();
    }
});

或者您也可以使用.on来绑定事件,

$(document).on('keydown', '', function(e) {
    if (e.keyCode == 83) {
        $('#myForm').submit();
    }
});

我已指定83,即letter 'S'

的关键ascii代码

答案 4 :(得分:0)

&#13;
&#13;
$("body").keydown(function(e) {

 
   
      $('#submitBtn').text("Pressed!");
 if(e.keyCode == 83) {
     $('#submitBtn').text("S Pressed!");
   }
    


});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="submitBtn" type="button">press here</button>
&#13;
&#13;
&#13;