javascript - 来自服务器的 Meteor 发布信息更改了 DOM 并删除了元素上的键盘焦点

标签 javascript dom meteor

我正在尝试构建一个像 Google Docs 这样的应用程序,其中包含带有文本区域的网页以及更改我发布和更新到服务器的值,并从更新 DOM 的服务器取回保存的响应。

问题是稍后发生的 DOM 更新删除了用户需要继续输入的文本区域焦点。焦点丢失,用户必须再次单击文本区域才能获得焦点并继续输入。

当远程更改服务器上的值并将其发送到客户端时,如何解决失去焦点的问题。

最佳答案

您可以使用 session 变量和 rendered在您的模板上回调以执行此操作。这是一个使用带有一个文本区域的模板的非常简单的示例:

<template name="home">
  <textarea></textarea>
</template>
Template.home.events({
  'focus textarea': function() {
    Session.set('hasFocus', true);
  },
  'blur textarea': function() {
    Session.set('hasFocus', false);
  }
});

Template.home.rendered = function() {
  if (Session.get('hasFocus')) {
    $('textarea').focus();
  }
};

Template.home.destroyed = function() {
  return Session.set('hasFocus', undefined);
};

当您聚焦或模糊文本区域时,我们修改 session 变量hasFocus。每当模板被渲染时,我们只关注基于相同变量的文本区域。当我们完成模板后,只需清理 hasFocus,这样它就不会干扰其他页面。

关于javascript - 来自服务器的 Meteor 发布信息更改了 DOM 并删除了元素上的键盘焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465138/

相关文章:

javascript - 打开一个新的浏览器窗口/iframe 并在 TEXTAREA 中从 HTML 创建新文档?

javascript - 使用内置 DOM 方法或 Prototype 从 HTML 字符串创建新的 DOM 元素

添加物化包时出现 meteor 错误

javascript - 将 JavaScript 库包含到 IntelliJ IDEA 的自动完成中

javascript - 我如何根据其他元素的高度设置页脚的边距,在 Angular 中而不是 jQuery?

javascript - 无法使用 puppeteer 按 ID 找到元素

javascript - 如何将 FlowRouter 与 Meteor 1.3.1 和 "Import"一起使用

javascript - Meteor:两种类型的用户,如何处理复杂的 UserAccounts?

javascript - React 和 Google 代码用于潜在客户转化页面

javascript - 如何使用 jQuery 将动态表行添加到 Wordpress 数据库