为什么Meteor不会在输入事件上更新以下输入?

时间:2015-01-24 11:25:54

标签: javascript jquery meteor

我有一个Document集合,其中的表单可以保存在input

document_form.html:

<template name="documentForm">
  <form class="form" role="form">
    <input name="title" type="text" value="{{title}}">
  </form>
</template>

document_form.js:

Template.documentForm.events({
  "input input": function(e) {
    e.preventDefault();

    currentDocumentId = this._id;

    setTimeout(function() {
      Documents.update(currentDocumentId, {
        $set: {
          title: $(e.target).find('[name=title]').val()
        }
      });
    }, 3000);
  }
});

如您所见,Document文档应在输入后三秒更新。

我所看到的是我的新输入三秒钟,然后旧的输入返回(旧输入正在恢复)。

所以,比方说,我有Document名为Untitled。我将输入输入AnotherTitle,然后在3秒后输入将恢复为Untitled

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

确定它不是允许/拒绝

   //client.js
    Template.documentForm.events({
      "input input": function(e) {
       e.preventDefault();
        currentDocumentId = this._id;
        setTimeout(function() {
        Meteor.call('updateCurrentDocumentId', {
        $set: {
          title: $(e.target).find('[name=title]').val()
        }
      });
    }, 3000);
  }
});

//server.js

    Meteor.methods({
      updateCurrentDocumentId:function(id,item){
           Documents.update(id,item);
        }
     })

有了这个我们避免,允许/拒绝。

答案 1 :(得分:1)

我认为问题在于你不应该使用find('[name=title]') find()用于获取元素的后代。在这里,您将目标指向输入字段,因此它足以使用: title: $(e.currentTarget).val()

希望你觉得它很有用!