【问题标题】:Error Getting Var from Html form Meteor javascript从 Html 表单 Meteor javascript 获取 Var 时出错
【发布时间】:2016-04-30 09:37:32
【问题描述】:

我正在尝试从 html 字段设置一个 var。当我运行流星时,它不会编译任何错误,但如果单击提交按钮,控制台会显示:

调用方法“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);
    }
});

它现在可以工作了..! :)

【问题讨论】:

    标签: javascript html meteor set var


    【解决方案1】:

    这里有一些问题。 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 方法。

    【讨论】:

    • Thankyou.. 现在错误不会出现在控制台上,但状态变量变为空。 “状态”:空
    • 使用浏览器中的javascript控制台验证document.getElementById()是否正常工作,并在服务器端添加console.log()以验证该值是否正确传递。
    • 像这样记录状态变量:console.log(statusvar) 在控制台中返回 undefined...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2017-02-22
    相关资源
    最近更新 更多