处理`keyup`事件时出错

时间:2017-09-18 10:42:43

标签: javascript meteor

我是meteor的新手,请任何人帮我解决下面的问题。

首先让我清楚一下我正在做什么项目。

我有一个存储用户详细信息的集合,因此我想编辑用户信息。我正在使用iron-router,因此当我在网址中输入user_id时,它会在文本框中显示用户详细信息,因此我可以对其进行编辑。

当我点击“编辑”按钮时,我可以保存已编辑的用户详细信息,但我想自动更新详细信息,因此我尝试使用keyup事件,但它无效。

当我处理keyup事件而不是submit时,我收到以下错误:

  

无法在Object.keyup .sub

中读取undefined的属性'value'

以下是我的js代码:

Router.route('/temp1/:_id', function () {
  var pid = this.params._id;
  this.render('temp1', {
    data: function () {
      return Dbs.findOne({ user_id: pid });
      Router.go("/temp1", {}, { id: pid });
    }
  });
});

Template.temp1.events({
  'keyup .sub'(event)  {
    const target = event.target;
    const user_id1 = target.user_id.value;
    const add1 = target.add.value;   
    const cont1 = target.cont.value;
    const pth1 = target.pth.value;

    var p = Dbs.findOne({ user_id: Router.current().params._id });
    Dbs.update({ _id: p._id }, {
      $set: {
        user_id: user_id1,
        cont: cont1,
        add: add1,
        pth: pth1
      }
    });
    console.log(user_id1);
    alert(user_id1);
  }
});

Html代码:

  <form class="sub">
    <input type="text" name="user_id" value="{{user_id}}"/>
    <input type="text" name="add" value="{{add}}"/>
    <input type="text" name="cont" value="{{cont}}"/>
    <input type="text" name="pth" value="{{pth}}" />

    <!--<center><input type="submit" value="Submit" class="waves-effect #607d8b grey btn"></center>-->
 </form>

1 个答案:

答案 0 :(得分:2)

当您使用submit .sub事件时 - 在您的处理程序中event.targetform,这就是target.user_id.value等结构正在发挥作用的原因。< / p>

当您使用keyup .sub事件时,此keyup事件会从其input元素冒泡到表单,因此event.target将指向input发送此事件的1}}。

有两种方法来修复&#34;你的问题:

  1. 使用event.currentTarget代替event.target

  2. 替换此行:

    const target = event.target;

    这一个:

    const target = $(event.target).closest('form').get(0);

    因此,您的target变量将始终指向form元素。