从 Html 表单 Meteor javascript 获取 Var 时出错

Error Getting Var from Html form Meteor javascript

本文关键字:Var 出错 获取 javascript Html 表单 Meteor      更新时间:2023-09-26

我正在尝试从html字段设置变量。当我运行 meteor 时,它不会编译并出现任何错误,但如果单击提交按钮,控制台会说:

调用方法"提交"时出现异常 类型错误:无法调用未定义的方法"阻止默认"

我真的想不通...

所以我的 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 方法。