0

单击提交按钮时,我尝试发送表单并删除表格行。

删除行功能我以咖啡脚本的方式完成,并且“删除表格行”有效。

但是,提交表单功能不起作用。

但是如果我删除 Coffee Script,提交表单会再次起作用。

咖啡脚本

jQuery ->
    $("#rf_tbl").on "click", "input[type=\"submit\"]", (e) ->
        $(this).closest("tr").remove()

看法

  = form_tag kill_running_task_remote_focus_path, :method => :get, remote: true do
    %table#rf_tbl.table.table-condensed.table-striped

      %tr
        %th User
        %th Camera IP
        %th Created Time
        %th PID
        %th Control

      - @running_tasks.each do |running_task|
        %tr{:id => "#{running_task[:pid]}"}    
          - running_task.each do |key, value|        
            %td
              = value
          %td
            = hidden_field_tag :task, running_task[:pid]
            = submit_tag "Kill This Task" ,:class=> "btn btn-primary autotest"

在 Rails 中正常吗?

请给我一些建议,谢谢。

4

1 回答 1

1

这是不正确的。

问题 1:所有行都有一个完整的大表格。提交时,您只想删除该行上的数据,但以提交整个表单结束。这是低效且容易出错的。解决方法是为每一行构建一个表单(您也可以使用 link_to 和 remote:true,它也以每个链接的每个表单结束)

问题2:不要听表单的提交并立即删除该行。UJS(的处​​理器remote: true)也监视此事件。我的猜测是,虽然以前从未这样做过,但由于 Javascript 是单线程的,这两个侦听器将有一个执行命令。如果你的监听器一开始被执行,数据被删除了,那么当 UJS 来的时候,它没有要序列化的表单字段并且会哭:(

在问题2中,即使不删除行,也存在另一个问题。提交不成功怎么办?无论服务器响应是什么,您的听众都会将该行标记为已完成。

jQuery Ajax 内部有一些解决方案,例如使用when, done. 但是由于您使用的是 UJS,因此最简单的解决方案是渲染脚本以在服务器响应时执行。

例如,您的第 2 行有一个专用表格。提交时,控制器收到此请求,然后知道任务 ID。然后,作为响应 js.erb,您可以指定要删除的特定 div。

$('#task_#{task.id}').remove();
于 2013-11-11T06:54:42.810 回答