根据输入值确认框

时间:2016-01-28 10:27:29

标签: javascript ruby-on-rails haml simple-form

我对javascript很新,所以不要刻意判断(任何建议或评论都会受到高度赞赏)。

我的rails应用程序(haml文件)中有一个表单:

= simple_form_for(@book, remote: true) do |f|
  .row
  .form-group
    = f.input :book_title, as: :string, label: "Title of a book"
    %br
    = f.input :pages_number, as: :string, label: "Number of pages"
    %br
  .form-actions
    = f.button :submit, "Create", class: "btn btn-success"
    = link_to t('buttons.cancel'), '#', onclick: "$.modal.close()", class: 'btn btn-warning pull-right'

打开表单的控制器中的操作:

  def new
    @book = Book.new
  end

控制器中保存表单的操作:

  def create
  end

我要做的是检查输入的页数是否大于10. 我想创建一个确认框。

我试图在@pages_number = params[:pages_number]操作中保存create,并在视图中使用data: (@pages_number < 10 ? { confirm: "Are you sure?" } : nil),但它不起作用。

在这种情况下我需要使用Javascript吗?

2 个答案:

答案 0 :(得分:1)

对于Rails表单,在定义输入数字字段时,我们可以设置字段可以接受的数值范围。

:min - 可接受的最小值。 :max - 可接受的最大值。

以上属性可用于轨道中的数字输入字段以控制值范围。

相当于

<input id="quantity" name="quantity" max="9" type="number" />

答案 1 :(得分:1)

永远记住unactive; Ruby = Server

如果您正在根据服务器设置的条件进行评估,那么您的代码就可以正常运行。

但是,由于您正在针对动态创建的条件进行评估,因此您需要使用javascript来确定该值是否值得调用确认对话:

Javascript = Client

以上,虽然需要调整,但应将输入的值评估到#app/assets/javascripts/application.js $(document).on("ajax:beforeSend", "#form", function(event, xhr, settings) { var $el = $(this); var $pages = $el.find("input[name='page_numbers']"); if ($pages.val() > 10) { var response = confirm($el.data('confirm') || 'Are you sure?'); // not sure if this will pull the rails confirm if (!response) { return; } } }); 框中。如果用户没有确认,它将返回,从而阻止进展。

当您使用page_numbers时,您可以在将请求发送到ajax驱动程序之前使用ajax:beforeSend挂钩进行插入。如果您没有使用ajax,那么您需要查看与remote: true方法的绑定。

<强>更新

经过长时间的聊天讨论,我们终于解决了以下问题:

form.on("submit"

我们还使用了this reference