Geo*_*nos 12 forms onsubmit meteor
我想在我的Meteor html模板中有一个表单,并在提交时将该数据插入我的MongoDB列表.我的问题是:
Aks*_*hat 16
JQuery包含在流星中并且非常简化,为什么要避免它?用js手动遍历dom很长
您可以使用javascript提交表单ajax样式:
所以你可以像往常一样在你的模板中使用普通的表单html:
// HTML
<form id="myform">
<input type="text" name="firstname"/>
<input type="text" name="lastname"/>
<input type="text" name="email"/>
<input type="submit" id="submit"/>
</form>
// Client JS
function submitme() {
form = {};
$.each($('#myform').serializeArray(), function() {
form[this.name] = this.value;
});
// Do validation on
// form = {
// firstname: 'first name',
// lastname: 'last name',
// email: 'email@email.com'
// }
MyCollection.insert(form, function(err) {
if(!err) {
alert("Submitted!");
$('#myform')[0].reset();
} else {
alert("Something is wrong");
console.log(err);
}
});
}
Run Code Online (Sandbox Code Playgroud)
您可以绑定选择按钮以在单击时插入数据:
事件地图绑定:
Template.templatename.events({
'submit' : function(event) {
event.preventDefault(); //prevent page refresh
submitme();
}
});
Run Code Online (Sandbox Code Playgroud)
如果你讨厌 jQuery并且根本不能使用它
// HTML
<form id="myform">
<input id="firstname" type="text" name="firstname"/>
<input id="lastname" type="text" name="lastname"/>
<input id="email" type="text" name="email"/>
<input type="submit" id="submit"/>
</form>
// Client JS
function submitme() {
form = {
firstname: firstname.value,
lastname: lastname.value,
email: email.value
};
// Do validation on
// form = {
// firstname: 'first name',
// lastname: 'last name',
// email: 'email@email.com'
// }
MyCollection.insert(form, function(err) {
if (!err) {
alert("Submitted!");
// Empty field values
email.value = "";
firstname.value = "";
lastname.value = "";
} else {
alert("Something is wrong");
console.log(err);
}
});
}
Run Code Online (Sandbox Code Playgroud)
And*_*Mao 11
仅供参考,有一种稍微更简洁的方法在没有所有全局jQuery引用的情况下在Meteor中执行表单,我觉得这些引用很混乱.它通过作用于事件处理程序中提供的模板使代码更容易出错.以下是使用其他答案中描述的表单的示例:
模板代码:
<template name="foo">
<form id="myform">
<input type="text" name="firstname"/>
<input type="text" name="lastname"/>
<input type="text" name="email"/>
<input type="submit" id="submit"/>
</form>
</template>
Run Code Online (Sandbox Code Playgroud)
事件处理程序
Template.foo.events({'submit form' : function(event, template) {
event.preventDefault();
firstname = template.find("input[name=firstname]");
lastname = template.find("input[name=lastname]");
email = template.find("input[name=email]");
// Do form validation
var data = {
firstname: firstname.value,
lastname: lastname.value,
email: email.value
};
email.value="";
firstname.value="";
lastname.value="";
MyCollection.insert(data, function(err) { /* handle error */ });
}});
Run Code Online (Sandbox Code Playgroud)
最简单,最简单的解决方案.
// HTML
<template name="formTemplate">
<form>
<input type="text" name="firstname"/>
<input type="text" name="lastname"/>
<input type="submit" id="submit"/>
</form>
</template>
// JavaScript
Template.formTemplate.events({
'submit form': function(event, template) {
event.preventDefault(); // prevent page reload
var firstname = event.target.firstname.value;
var lastname = event.target.lastname.value;
}
});
Run Code Online (Sandbox Code Playgroud)