Ruby on Rails 表单验证删除了 Javascript 更改

Ruby on Rails Form Validation Removes Javascript Changes

提问人:djFuz 提问时间:11/1/2023 更新时间:11/1/2023 访问量:50

问:

我有一个表单,它基于用户的点击,更改了一些标签和占位符文本,并隐藏了一些表单元素。如果表单存在验证错误,它会将 javascript 所做的所有更改重置为加载表单时最初存在的更改(即隐藏的表单对象再次可见,标签/占位符更改回原始文本)。如果发生表单验证错误,有没有办法维护这些更改?如果由于验证错误而加载表单,是否会触发 javascript 事件?

我使用的是普通的javascript,而不是jquery。

JavaScript Ruby-on-Rails 验证错误

评论


答:

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 更改不再存在。