2012-10-22 83 views
20

我想捕獲用戶在填寫表單時在輸入type="text"上按回車鍵的事件。這是通過網絡完成的,但答案並沒有解決。Meteor輸入文本返回事件

這是我到目前爲止有:

在HTML文件中,我有一個文本輸入,像這樣:

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

在JavaScript文件,我試圖捕捉用戶按下進入以有效提交表格。我抓住,然後從輸入的文本,將藏匿在數據庫:

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),然後繼續成功。

Template.newLink.events = { 
    'keypress input.newLink': function (evt, template) { 
    if (evt.which === 13) { 
     var url = template.find(".newLink").value; 
     // add to database 
    } 
    } 
}; 
+3

你在哪裏定義'template'? – Simone

+0

聲明應該是:'function(evt,template)'代替。如[事件映射文檔](http://docs.meteor.com/#eventmaps)中所述,「處理函數接收兩個參數:事件,包含有關事件信息的對象和模板,處理程序被定義的模板「。我剛編輯了示例代碼。 –

+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

您還可以使用event.currentTarget.value

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