使用 ajax 更新表单后自动对焦不起作用
Autofocus not working after updating form with ajax
在 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
页面加载时会触发自动对焦,因此如果您的页面已经加载,您将不会获得预期的结果。
当 ajax 调用在您的回调中完成时,您可以手动聚焦第一个自动聚焦元素,例如:
const autofocusedElements = document.querySelectorAll('input[autofocus]');
if (autofocusedElements.length) {
autofocusedElements[0].focus();
}
在 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
页面加载时会触发自动对焦,因此如果您的页面已经加载,您将不会获得预期的结果。
当 ajax 调用在您的回调中完成时,您可以手动聚焦第一个自动聚焦元素,例如:
const autofocusedElements = document.querySelectorAll('input[autofocus]');
if (autofocusedElements.length) {
autofocusedElements[0].focus();
}