我对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吗?
答案 0 :(得分:1)
对于Rails表单,在定义输入数字字段时,我们可以设置字段可以接受的数值范围。
以上属性可用于轨道中的数字输入字段以控制值范围。
相当于
<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。