2

すでにこの種の問題に対処しているエントリがいくつかあることを知っており、かなりの数を見てきましたが、私の状況ではどれもうまくいかないようです。これに関するヘルプは大歓迎です。

私が持っているのは、動的に生成されたフォームです (さまざまな量の入力が存在する可能性があります)。Enterキーを使用してそれらをタブで移動する必要があります。現在、タブ キーは要素を正常に通過しますが、私の基準では、Enter キーを有効にする必要があります。最終入力に到達して Enter キーを押すと、現在 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()children の代わりに使用する必要があります

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

.children() メソッドは .find() とは異なり、.children() は DOM ツリーを 1 レベル下に移動するだけですが、.find() は複数のレベルを下に移動して子孫要素 (孫など) も選択できます。

これは、div$('.credential_inputs').children()のみを返し、.txt_wrapperそれ以上トラバースしないことを意味します。

于 2012-07-24T17:20:55.723 に答える