2012-10-22 8 views
20

में इनपुट टेक्स्ट रिटर्न इवेंट मैं type="text" के इनपुट पर प्रवेश करने वाले उपयोगकर्ता की घटना को कैप्चर करना चाहता हूं, जब वे फ़ॉर्म भर रहे हों। यह पूरे वेब पर किया जाता है, फिर भी जवाब मुझे बढ़ाता है।मेटीर

html फ़ाइल में, मैं तो जैसे किसी टेक्स्ट इनपुट:

यह वही है मैं अब तक किया है

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

जावास्क्रिप्ट फ़ाइल में, मैं उपयोगकर्ता दबाने पर कब्जा करने की कोशिश कर रहा हूँ फॉर्म को प्रभावी रूप से सबमिट करने के लिए दर्ज करें। मैं तो इनपुट से पाठ हथियाने और डेटाबेस में यह छिपाया जा जा रहा हूँ:

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) सुनना होगा। ईवेंट हैंडलर के भीतर, चेक करें, अगर यह रिटर्न/एंटर कुंजी (कीकोड 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

घोषणा यह होनी चाहिए: 'फ़ंक्शन (evt, टेम्पलेट)' इसके बजाए। जैसा कि [इवेंट मैप दस्तावेज] (http://docs.meteor.com/#eventmaps) में उल्लेख किया गया है, "हैंडलर फ़ंक्शन दो तर्क प्राप्त करता है: ईवेंट, घटना के बारे में जानकारी वाला एक ऑब्जेक्ट, और टेम्पलेट, टेम्पलेट उदाहरण के लिए टेम्पलेट जहां हैंडलर परिभाषित किया गया है "। मैंने अभी उदाहरण कोड संपादित किया है। –

+0

यह बहुत अच्छा काम किया। – Andy

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; 
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 
    } 
    } 
}; 
संबंधित मुद्दे