ajax 请求在 css 弹出窗口中形成

ajax request to form in css popup

来自法国...对不起我的英语...

我在 symfony 3 中编写代码。 我有一个实体 "book",根据 "type" 属性 selected,一个或多个属性(客户、学生、组织者和/或演讲者)每个映射为一个实体 "user"。 在我的 "book" 表单中,我可以 select 为每个与 "user" 我在 bdd 中注册的用户相关的属性。 我想通过打开弹出窗口 css 添加一个 "user",加载我的用户表单并用 ajax 保存它。如果成功,我会用 ajax 为我的列表充值,以便在我的“预订”表格中使用。

function nouveauOrganisateur() {
    $.ajax({
        url : Routing.generate('user_new'),
        success: function(html) {
            $('#NewOrganisateur').append(
                $(html).find('form')
            );
            $('div#NewOrganisateur form button').replaceWith(
                $(
                    '<button onclick="EnregistrerClient(event)">Enregistrer</button>'
                )
            );
        }
    });
}


function EnregistrerClient( event ) {
    console.log(event.target.nodeName);
    var $form = $( event.target ).closest( 'form');
    $.ajax({
        url : Routing.generate('user_new'),
        type: 'post',
        success: function(html) {
            console.log(html);
        }
    })
}
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>

<div id="UserOrganisateur" class="label">
    <strong>{{ form_label(form.Stage.organisateurs, "Organisateurs ") }}</strong>
    {{ form_errors(form.Stage.organisateurs) }}
    {{ form_widget(form.Stage.organisateurs) }}
    <button onclick="nouveauOrganisateur()">Ajouter un Nouveau client</button>
    <div id="NewOrganisateur">
        {{ form_errors(form.Stage.NewOrganisateur) }}
        {{ form_widget(form.Stage.NewOrganisateur, {'value' : false}) }}
    </div>
</div>

当我验证我的表单 "user" 时,我的页面被重新加载,但这不是我想要的。而我的用户没有注册!? 我从 javascript 开始。你能帮帮我吗?


从我的表单中,我有一个 "select" 类型。 当 "type" 被 select 编辑时,多亏了 FormEvents 和一个 js 脚本,我加载了表单的其余部分。 例如,如果我的 "type" 是 "training",我加载嵌入式实体培训表格。我的 "training" 实体包含 "organizer" 属性和 "speaker",2 个多个 select 选项是存储在 BDD 中的 "user"。 在这个表单中,我添加了一个按钮来记录一个新的"user"。此按钮显示要使用的注册表单,其中我将提交按钮替换为 Ajax 操作按钮。我只想注册我的新用户并为我的 select 列表("organizer" 和 "speaker")充值,但是当我单击最后一个按钮时,我的页面来自哪里 select "type".


稍作改动,我可以注册我的新用户

function nouveauOrganisateur() {
    $.ajax({
        url : Routing.generate('user_new'),
        success: function(html) {
            console.log(html);
            $('#NewOrganisateur').append(
                $(html).find('form')
            );
            $('form[name=user] button').replaceWith(
                $(
                    '<button>Enregistrer</button>'
                )
            );
            $('form[name=user] button').on("click", function(){
                $.ajax({
                    url : Routing.generate('user_new'),
                    type: 'post',
                    data: $('form[name=user]').serialize(),
                    success: function(html) {
                        console.log(html);
                    }
                });
            });
        }
    });
}

但是我的页面总是重新加载???

我认为您试图阻止页面在用户单击按钮时重新加载或更改。可能有两种解决方案:

1.) <button> html 标签默认为 type="submit" 提交表单。您可以通过添加 type="button"

来避免这种情况

2.) 在 javascript 函数中 EnregistrerClient 在函数顶部添加一行 event.preventdefault(); 这将停止提交表单。