如何使用Jquery中的enter键来标记表单元素

时间:2012-07-24 17:09:52

标签: jquery javascript-events

我知道有几个条目已经处理过这类问题,我已经看了很多,但是在我的情况下似乎都没有。任何有关这方面的帮助将不胜感激。

我所拥有的是动态生成的表单(可以有不同数量的输入)。我需要使用我的回车键来浏览它们。目前tab键的选项卡通过元素很好,但我的标准要求我启用enter键。当我到达最终输入并按下回车时,它需要执行当前通过标签完成的提交操作

以下是我的HTML表单以及处理keypress事件的JS的代码片段

<div class="credential_form">
<div class="error_msg">
    <h4>There was a problem connecting.</h4>
</div>
<div class="credential_inputs">
    <div class="txt_wrapper">
        <input type="text" style="width: 130px">
    </div>
    <div class="txt_wrapper">
        <input type="password" style="width: 130px; display: none;" class="real">
    </div>
    <div class="clear"></div>
</div>
<div class="add_button">
    <a class="button" href="javascript:void(0)"><span>Add</span></a>
</div>
<div class="clear"></div>
<div class="sub_input">
    <div class="link">
        <span class="sub_text">Forget your details? Go to&nbsp;</span>
        <a class="sub_link" href="http:somewhere.com">Somewhere</a>
    </div>
</div>
</div>

由于某种原因,我的集合变量无法识别if条件中的当前元素。

var code = (event.keyCode ? event.keyCode : event.which);

if (code == 13) {

var $inputs = $(event.target).closest('.credential_inputs').children($(':input:visible'));
var $addButton = $(event.target).closest('.credential_form').children($('a:first-child'));

if ( $(event.target) == $inputs[$inputs.length - 1] ) {
    $addButton.click()
} else {
    $(event.target).closest(".credential_inputs").nextAll('input:first').focus();
}
}

由于

2 个答案:

答案 0 :(得分:0)

在比较中使用.is()

if( $(event.target).is($inputs.last()) ) { ... }

尽管如此,您可能需要检查匹配元素的匹配表达式($inputs$addButton)。

答案 1 :(得分:0)

您需要使用find()代替孩子

var $inputs = $(event.target).closest('.credential_inputs').find(':input:visible');
  

.children()方法与.find()的区别仅在于.children()   在.sind()可以遍历时沿DOM树向下移动一个级别   在多个级别选择后代元素(孙子,   等)。

这意味着$('.credential_inputs').children()只返回您的.txt_wrapper div,而不会进一步遍历。