2

我知道有几个条目已经在处理这类问题,我也看过不少,但似乎没有一个适合我的情况。对此的任何帮助将不胜感激。

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

下面是我的 HTML 表单以及处理按键事件的 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();
}
}

谢谢

4

2 回答 2

0

.is()在您的比较中使用。

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

虽然,您可能想要检查匹配元素($inputs$addButton)的匹配表达式。

于 2012-07-24T17:17:15.827 回答
0

你需要使用find()而不是孩子

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

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

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

于 2012-07-24T17:20:55.723 回答