提问人:djFuz 提问时间:11/1/2023 更新时间:11/1/2023 访问量:50
Ruby on Rails 表单验证删除了 Javascript 更改
Ruby on Rails Form Validation Removes Javascript Changes
问:
我有一个表单,它基于用户的点击,更改了一些标签和占位符文本,并隐藏了一些表单元素。如果表单存在验证错误,它会将 javascript 所做的所有更改重置为加载表单时最初存在的更改(即隐藏的表单对象再次可见,标签/占位符更改回原始文本)。如果发生表单验证错误,有没有办法维护这些更改?如果由于验证错误而加载表单,是否会触发 javascript 事件?
我使用的是普通的javascript,而不是jquery。
答:
0赞
Dev Kumar
11/1/2023
#1
不,表单验证错误不会这样做。单击提交按钮后,页面可能会重新加载,并且服务器会触发事件。
0赞
GTO
11/1/2023
#2
不幸的是,经典的表单提交抛弃了 DOM 中的所有更改。 但是您可以通过 JS 异步提交表单。这样,JS 所做的更改将保留在页面上。但是您将需要使用更多的JS代码来处理表单提交的结果。
form.addEventListener('submit', function (event) {
event.preventDefault();
var formData = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open('POST', form.action);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onload = function () {
if (xhr.status >= 200) {
var response = JSON.parse(xhr.responseText);
if (response.success) {
// handle successful submission
} else {
// handle validation errors
}
}
};
xhr.send(formData);
});
在控制器中类似这样的东西:
respond_to do |format|
format.json { render json: { success: true } }
end
评论
0赞
djFuz
11/2/2023
谢谢,我无法让它与此一起工作。我最终只是在每次加载页面时调用我的 javascript 函数,最终每次都根据用户选择进行所有更改。我想我最大的问题,你回答的是以前的 DOM 更改不再存在。
评论