从 Meteor javascript Html 获取 Var 时出错
Error Getting Var from Html form Meteor javascript
我正在尝试从 html 字段设置一个变量。当我 运行 meteor 时,它不会编译出现任何错误,但是如果单击提交按钮,控制台会显示:
Exception while invoking method 'submitme' TypeError: Cannot call method 'preventDefault' of undefined
我真的想不通...
所以我的 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() 应该只调用服务器端代码;您不能尝试从 submitme
函数访问 document
,也不需要 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 方法。
我正在尝试从 html 字段设置一个变量。当我 运行 meteor 时,它不会编译出现任何错误,但是如果单击提交按钮,控制台会显示:
Exception while invoking method 'submitme' TypeError: Cannot call method 'preventDefault' of undefined
我真的想不通...
所以我的 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() 应该只调用服务器端代码;您不能尝试从 submitme
函数访问 document
,也不需要 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 方法。