使用Ajax更新表单后自动对焦不起作用

时间:2019-04-03 14:26:09

标签: javascript ruby-on-rails ruby-on-rails-5.2

在Rails 5.2中,我使用form_with帮助器创建了一个表单(我的第一个表单)。 默认情况下,这是remote: true

此表单包含一个带有autofocus="autofocus"的输入。

在验证错误后,相同的表格将以ajax返回。 我用它来更新表格:

document.addEventListener('ajax:success', (event) => {
  const [data, status, xhr] = event.detail;
  const form = document.getElementById('form-signin')
  form.parentNode.innerHTML = xhr.responseText
})

这有效,但是自动对焦现在不起作用。 (第一次)

是否可以自动对焦,还是应该在上面的js代码中手动执行此操作?

一切都适用于local:true,但是由于这不再是默认设置,所以我想尝试新的方法。没有太多关于如何正确处理ajax响应的文档。 (起初我以为Turbolinks会为我做这件事)

解决方案: 下面的答案有效,但是我找到了一个更好的解决方案,使它变得容易得多。它无需编写自定义javascript就可以工作: https://github.com/turbolinks/turbolinks-rails/issues/40 https://github.com/jorgemanrubia/turbolinks_render

1 个答案:

答案 0 :(得分:2)

页面加载时会触发自动对焦,因此如果页面已加载,您将无法获得预期的结果。

当ajax调用从回调中完成时,您可以手动将第一个自动聚焦元素聚焦,例如:

%B