3

作業中のプロジェクトの開発をスピードアップするために、jQueryを使用してセミジェネリックフォームプラグインを作成しています。

計画では、jTemplatesテンプレートにフィールドが含まれ、プラグインはテンプレートを調べて必要な多言語リソースを見つけ、サーバーからそれらを要求し、すべてをJavaScriptオブジェクトにパッケージ化して、上のカスタム関数に渡します。 "参加する"。

フォームを偽造するときに実行する必要のある標準の「Enterキーを押したら、フォームを送信する」コードを除いて、すべてがうまく機能しています。

opts.coreElement.find('input[type=text]').keypress(function(evt) {
    if ((evt.keyCode || evt.which) == 13) {
        opts.coreElement.find('.saveButton').click();
    }
});

問題は、Firefoxでは(少なくとも、他のブラウザはまだチェックしていません)、以前に同じ名前のテキストボックスに情報を入力したことがある場合は、フォームの履歴が表示されることです。次に、Enterキーを押してこれらの推奨値のいずれかを選択すると、フォームが送信されます。ページの最初の入力をしている場合は、あまり良くありません。実際、かなり面倒です。

明らかな解決策は、フィールドの周りにフォーム要素を挿入し、jQueryを介したこのダミーフォームの送信を停止することです。幸い、ASP.NET MVCを使用しているので、これを実行する余裕がありますが、そうでない場合はどうなりますか?プラグインがすでにフォーム内にあるかどうかを知らなかったため、プラグイン自体を保持する必要があった場合はどうなりますか?標準のWebFormsASP.NETを使用していて、各入力のリターンキーを正しい送信ボタンに手動で「ターゲティング」する必要がある場合はどうなりますか?

おそらくイベントオブジェクト自体を介して、キー押下のコンテキストを検出し、フォーム履歴アイテムの選択を除外できるようにする方法はありますか?

4

3 に答える 3

2

[enter] または [tab] キー イベントのデフォルト アクションを防止するには、keydown イベントをリッスンして処理/キャンセルする必要があることがわかりました。
keyup または keypress がトリガーされるまでに、keydown のデフォルトがすでに発生しています。

于 2009-01-06T12:31:19.487 に答える
2

autocompleteテキスト フィールドの属性を次のように設定しoffます。

opts.coreElement.find('input[type=text]').each(function() {
     $(this).attr('autocomplete', 'off');
});

これは、すべての主要なブラウザー (Safari、Firefox、IE) で機能します。

于 2009-01-11T00:14:23.817 に答える
0

wulong からの回答は機能しますが、質問に完全には回答しませんでした。提案された解決策は、入力テキスト フィールドの履歴を無効にすることです。しかし、 keypressed イベントが入力テキストまたは履歴から来ていることを知る方法はありますか?

于 2010-06-07T11:50:39.380 に答える