2012-10-22 13 views
20

フォームを記入するときに、type="text"の入力でenterを押したというイベントをキャプチャしたいと思います。これはウェブ上で行われますが、答えは私を逃してしまいます。流星の入力テキストの返信イベント

これは私がこれまで持っているものです:私は、ユーザー押しを捕獲しようとしています、Javascriptのファイルで

<input type="text" size=50 class="newlink"> 

htmlファイルでは、私はそうのようなテキスト入力を持っていますフォームを効果的に提出するために入力してください。私は、入力からテキストをつかみ、それをデータベースに隠しておくつもりです:

Template.newLink.events = { 
    'submit input.newLink': function() { 
     var url = template.find(".newLink").value; 
     // add to database 
    } 
    }; 

答えて

42

submitイベントはフォームではなく、単一の入力要素から放出されます。

流星のための組み込みのイベントマップは、http://docs.meteor.com/#eventmapsに記載されています。

キーボードイベント(keydown, keypress, keyup)を聞く必要があります。イベントハンドラ内で、戻り/入力キー(Keycode 13)であるかどうかを確認し、成功したら処理を進めます。

+3

を使用することができますか? – Simone

+0

宣言は 'function(evt、template)'だったはずです。 [イベントマップのドキュメント](http://docs.meteor.com/#eventmaps)に記載されているように、「ハンドラ関数は、イベント、イベントに関する情報を持つオブジェクト、およびテンプレートの2つの引数を受け取ります。ハンドラが定義されているテンプレート "を参照してください。私はサンプルコードを編集しました。 –

+0

これはうまくいった。 – Andy

1

このjs関数を使用して、テキストフィールドの戻りキーを使用してユーザーがフォームデータを送信しないようにしました。キャプチャに合わせて変更することは可能でしょうか?

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; 
6

あなたは、これが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; 
}; 
1

また、あなたは `template`を定義しなかったevent.currentTarget.value

Template.newLink.events = { 
    'keypress input.newLink': function (evt) { 
    if (evt.which === 13) { 
     var url = event.currentTarget.value; 
     // add to database 
    } 
    } 
};