Facebox - 在div中加载表单会破坏表单的唯一性

时间:2011-10-14 14:40:49

标签: jquery ruby-on-rails facebox

所以,我正在使用Facebox 1.3(最新版)

我用这样的链接调用facebox:

<a href="#dialog" class="comment action_button" rel="facebox">comment</a>

#dialog是一个看起来像这样的div:

<div id="dialog" class="dialog" style="display: none">              
    <form id="redline_form">
        <textarea id="suggested_text" name="suggested_text" style="width: 100%; height: 250px;"></textarea>

        <br>
        <!-- submit button here -->
    </form>

</div>

所以,我读到当facebox将div加载到自身时,它会克隆DOM元素。这没关系,除了我的提交按钮实际上是AJAX调用,它也通过表单的ID提交表单。并且由于ID不再是唯一的,它提交原始表单,而不是facebox(您可以通过向选择器添加#facebox来获取)。

我如何制作它以使表单保持唯一且不会被克隆。或者,有一种方法可以在Ruby on Rails的link_to_remote中指定表单ID吗?

<%= link_to_remote "Submit Comment",
    :url => { :action => :create_redline_comment_or_change, 
    :commit => "Submit Comment" },
    :submit => "redline_form",
    :html => {:id => "comment_submit"} %>

这里使用:submit参数,我尝试做#facebox #redline_form,但它不知道如何解释它。 (没有请求发送到服务器)。它现在的方式是,它向服务器发送请求,但它发送非facebox表单。 = \

使用Rails 2.3.8

此处显示的工作流程的相关Javascript:

    jQuery(".comment").click(function(){
        $j("div#rl_menu").fadeOut(100);

        $j(".original_text").html('' + $selected_text);
        $j("textarea#suggested_text").html("Enter your comment(s) then click submit.");
        $j("#comment_submit").show();
        $j("#change_submit").hide();

        form = $j("#facebox #redline_form_fake");
        form.attr("id", "redline_form");
        form.attr("name", "redline_form");

        field = $j("#facebox #redline_form #suggested_text_fake");
        field.attr("id", "suggested_text");
        field.attr("name", "suggested_text");
    });

编辑:添加了应该更改facebox中表单元素的ID的代码,但它不起作用。

2 个答案:

答案 0 :(得分:0)

我的解决方案:是代替加载已经在页面上的div(得到克隆,并导致具有相同ID的多个元素的问题),将表单放入部分,并将该部分加载到facebox。

对于非web-appers,它只是加载包含div的URL。 = d

答案 1 :(得分:0)

我正在使用Facebox 1.3和jQuery Validation Plugin,并且有一个表单可以创建一个带有表单的新用户。

                <a onclick="jQuery.facebox({ ajax: 'includes/cuser_form.inc' })"  

我遇到了同样的问题并尝试了你的方法TheLindyHop,(首先没有尝试替换表单的id和名称,这对我不起作用,因为字段元素需要具有特定的名称才能将这些值输入到DB,..需要保留这些字段的名称和id。否则,如果这不是关键,当Facebox克隆元素时,你可以以某种方式检测输入元素..你需要检查哪个版本op正在使用)并且它的工作方式就像一个魅力..所以基本上我包含一个.inc文件与表格的div内容..并在使用这种方法但没有href(尝试href =“javascript:void(0) ;”  然后删除它并做同样的事情,这似乎是正确答案..需要用AJAX完成)