我试图从一个html字段设置一个var。当我运行meteor时,它不会编译错误,但是如果单击submit按钮,控制台会显示:
调用方法“submitme”时出现异常类型错误:无法调用未定义的方法“preventDefault”
我真的搞不懂。。。
所以我的html部分是:
<template name="status">
<form id="status">
<input id="status" type="text" name="status"/>
<input type="submit" id="submit"/>
</form>
</template>
事件的javascript部分:
submitme: function(event){
event.preventDefault();
var statusvar = document.getElementById("status").value;
alert("Submitted!");
Meteor.users.update({
_id: this.userId
}, {
$set:
{
'status': statusvar
}
});
},
最后
Template.status.events({'submit' : function(event) {
Meteor.call('submitme');
event.preventDefault(); //prevent page refresh
}
编辑:
固定的!
下面的助手发布了:
Template.status.events({
'submit' : function(event) {
event.preventDefault(); //prevent page refresh
var statusvar = document.getElementById("status").value;
alert("Submitted!");
Meteor.call('submitme', statusvar);
}
});
这不起作用。
我把它换成:
Template.status.events({
'submit' : function(event) {
event.preventDefault(); //prevent page refresh
var statusvar = event.target.status.value;
alert("Submitted!");
Meteor.call('submitme', statusvar);
}
});
现在可以了。。!:)
最佳答案
这里有一些问题。Meteor.call()应该只调用服务器端代码;您不能尝试从document
函数访问submitme
,也不需要在submitme
中使用event.preventDefault()(而且您也不会传递任何内容,因此无法访问event
)。像这样修改代码:
//THIS MUST BE ON THE SERVER SIDE
submitme: function(statusvar) {
Meteor.users.update({
_id: this.userId
}, {
$set: {
'status': statusvar
}
});
},
//CLIENT SIDE
Template.status.events({
'submit' : function(event) {
event.preventDefault(); //prevent page refresh
var statusvar = document.getElementById("status").value;
alert("Submitted!");
Meteor.call('submitme', statusvar);
}
});
事件函数将从HTML中提取值,然后将该变量传递给名为
submitme
的服务器端Meteor方法。