【问题标题】:How to run javascript code in Rails when form submitted via text field?通过文本字段提交表单时如何在 Rails 中运行 javascript 代码?
【发布时间】:2014-08-05 20:14:01
【问题描述】:

我在 HAML 中定义了一个可编辑文本字段表,如下所示:

%table
  %tbody
    %tr
      %td
        -hints.each do |hint|
          =form_for(level_source_hint, :remote => true) do |f1|
            =text_field_tag 'message' + hint.id.to_s, 
               level_source_hint.hint, class: 'input-xxlarge'
      %td{:id => 'sibling' + hint.id.to_s} ...

请注意,没有提交按钮。如果有人编辑文本字段并按回车键,则会发送更新请求,这有效。

当用户提交表单时,我想用javascript对兄弟节点做一些事情(在第二个%td)。我尝试将:onchange 属性添加到form_for 标记,但它没有显示在生成的html 中。

虽然我可能能够将函数绑定到每个不同的表单,但这样做会很难看,因为我需要为每一行(其数量直到运行时才知道)和每个函数创建一个不同的函数必须硬编码它来自哪一行(例如,它的hint.id)。

我真的需要为每个表单创建和绑定一个函数,还是有更优雅的解决方案?

我正在使用带有 jquery-rails 3.1.10 和 jquery-ui-rails 4.2.0 的 Rails 4.0.3。

【问题讨论】:

    标签: javascript html ruby-on-rails forms haml


    【解决方案1】:

    您实际上可以bind 到它们的父元素,然后在 event 冒泡到处理程序时检查它是哪个元素。类似$('#parent_id').on('change', '.field-class', function(){//your code here dealing with submit});

    【讨论】:

    • 谢谢!您是建议一个绑定,还是每行一个绑定?如果是前者,我怎么知道哪一行的表格被改变了?
    • 父元素上的一个绑定和来自子元素的事件将冒泡。您还可以绑定到子窗体的submit 事件您的调用。在处理程序中,如果您引用$(this),它将被限定为触发事件的元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多