通过JavaScript在Rails应用程序中插入数据远程表单,不会捕获远程

bca*_*lla 7 javascript ruby-on-rails ujs

我有一个简单的表单被附加到容器:

<form action="/something" data-remote="true" method="post">
  <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

我的理解是rails_ujs.js捕获所有提交事件,因此在插入新表单时我不需要重新附加任何事件.但是,此表单不会被视为远程表单.即使我rails_ujs.js在一般提交事件中放入调试器,此表单也不会触发该事件.所有表单呈现服务器端触发都没问题.

我是否错过了必须将事件附加到动态插入表单的内容?

bca*_*lla 11

事实证明,我正在表单中呈现一个表单,这导致了问题.我是个白痴:p


Vic*_*aga 0

我不确定 Rails_ujs.js 是如何工作的,但我认为您的问题在于您在客户端添加的 html 内容不会响应已绑定的事件。解决方案是,每当您在客户端添加新的 HTML 元素时,您还必须将任何事件绑定到它。

考虑以下示例:

<html>
<head>
    <title>My Page</title>
    <script src="jquery.js"></script>
</head>
<body>
    <div id="content">
        <a href="#" class="link">Click me</a>
    </div>
    <a href="#" class="add_link">Add link</a>
    <script type="text/javascript">
    $(document).ready(function(){
        $('.link').click(function(){
            alert('Click me');
        });

        $('.add_link').click(function(){
            $("#content").append("<a href='#' class='link'>Click me no alert...</a>");
        });
    });
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当您单击“添加链接”链接时,它将添加一个链接,上面写着“单击我”并且具有“链接”类。但是,如果您单击此链接,它不会显示警报,也就是说,单击事件不会触发,它只会针对服务器端生成的内容触发。

这个问题更详细地描述了解决方案: In jQuery, how to Attach events todynamic html elements?

但是我不确定如何将它应用到rails_ujs,你可能需要在那里做一些修改。