ユーザーがフォームに入力しているときにtype="text"
の入力でEnterキーを押したイベントをキャプチャしたいと思います。これはウェブ全体で行われていますが、答えは私にはわかりません。
これは私がこれまでに持っているものです:
Htmlファイルには、次のようなテキスト入力があります。
<input type="text" size=50 class="newlink">
Javascriptファイルで、Enterキーを押してフォームを効果的に送信するユーザーをキャプチャしようとしています。次に、入力からテキストを取得して、データベースに格納します。
Template.newLink.events = {
'submit input.newLink': function () {
var url = template.find(".newLink").value;
// add to database
}
};
submit
イベントは、単一の入力要素ではなく、フォームから発行されます。
流星の組み込みイベントマップはここに文書化されています: http://docs.meteor.com/#eventmaps 。
キーボードイベントをリッスンする必要があります(keydown, keypress, keyup
)。イベントハンドラー内で、それがリターン/エンターキー(Keycode 13
)、そして成功に進みます。
Template.newLink.events = {
'keypress input.newLink': function (evt, template) {
if (evt.which === 13) {
var url = template.find(".newLink").value;
// add to database
}
}
};
todos の例( client/todos.js )でこれがどのように達成されるかを調べることができます。
入力フィールドに汎用イベントハンドラーを使用します(以下を参照)。残りのコードを参照して使用できます。
////////// Helpers for in-place editing //////////
// Returns an event map that handles the "escape" and "return" keys and
// "blur" events on a text input (given by selector) and interprets them
// as "ok" or "cancel".
var okCancelEvents = function (selector, callbacks) {
var ok = callbacks.ok || function () {};
var cancel = callbacks.cancel || function () {};
var events = {};
events['keyup '+selector+', keydown '+selector+', focusout '+selector] =
function (evt) {
if (evt.type === "keydown" && evt.which === 27) {
// escape = cancel
cancel.call(this, evt);
} else if (evt.type === "keyup" && evt.which === 13 ||
evt.type === "focusout") {
// blur/return/enter = ok/submit if non-empty
var value = String(evt.target.value || "");
if (value)
ok.call(this, value, evt);
else
cancel.call(this, evt);
}
};
return events;
};
event.currentTarget.value
を使用することもできます
Template.newLink.events = {
'keypress input.newLink': function (evt) {
if (evt.which === 13) {
var url = event.currentTarget.value;
// add to database
}
}
};
このjs関数を1回使用して、テキストフィールドのリターンキーを使用してフォームデータを送信するユーザーを抑制しました。おそらく、キャプチャに合わせて変更できますか?
function stopRKey(evt) { // Stop return key functioning in text field.
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if ((evt.keyCode == 13) && (node.type=="text")) { return false; }
}
document.onkeypress = stopRKey;