远程表单提交禁用输入

时间:2017-11-19 05:41:41

标签: jquery ruby-on-rails forms turbolinks

在我的表单中,我想忽略表单提交上的一些输入字段。

我使用prop('disabled', true)来禁用字段,但它们仍然被提交

这只发生在远程表单上。它可能是什么?

我使用turbolinks,rails和jquery

在这种情况下,将远程表单转换为常规整页重新加载(模态和内容)

2 个答案:

答案 0 :(得分:0)

不要直接访问params,你想要对它们进行清理,这里有一些伪代码的例子,假设你只想要评论标题&身体(所有其他参数将被清除):

class CommentController < ApplicationController
  def create
    Comment.create(comment_params)
  end

  private

  def comment_params
    params.require(:comment).permit(:title, :body)
  end
end

答案 1 :(得分:0)

我遇到了完全相同的问题(需要根据用户交互禁用和启用某些字段)。使用分支5-1-stable解决了这个问题。 (之前是5.1.2

gem 'rails', git: 'https://github.com/rails/rails.git', branch: '5-1-stable' 

并更新您的Rails gem

bundle update rails 

pull request解决了这个问题。

注意:我正在处理的应用程序尚未投入生产,因此我现在在使用stable分支时没有任何问题。如果您需要更保守的方法,可以尝试使用5.1.4代替,并检查上述链接中的提交是否包含在回购中。

如果您无法更改rails gem版本,另一种解决方案可能是删除或清空您不具有的输入的name属性  想要提交。如果您检查提取请求中的更改,则可以看到当前rails-ujs正在从params那些没有name属性的字段中删除。因此,根据需要在字段中删除/设置此属性应该可行(尽管我没试过)。也许是这样的:

// 'disable' the fields
$('your-inputs-selector[disabled="disabled"]').each(function(idx, elem) {
  var $elem = $(elem);
  $elem.data('input-name', $elem.attr('name'));
  $(elem).attr('name', '');
});  
// 're-enable' the fields
$('your-inputs-selector').each(function(idx, elem) {
  var $elem = $(elem)
  $elem.attr('name', $elem.data('input-name'));
});

希望得到这个帮助。