Jquery 在Sonata类型集合中创建新行后如何添加javascript?

Jquery 在Sonata类型集合中创建新行后如何添加javascript?,jquery,symfony-2.1,sonata-admin,Jquery,Symfony 2.1,Sonata Admin,我注意到文件中有../vendor/sonata project/doctrineorm管理包/sonata/DoctrineORMAdminBundle/Resources/views/CRUD/edit_orm_one_association_script.html.twig,当您单击链接add时,它会创建一个新行,具体如下代码所示: // the ajax post jQuery(form).ajaxSubmit({ url: '{{ url('sonata_adm

我注意到文件中有../vendor/sonata project/doctrineorm管理包/sonata/DoctrineORMAdminBundle/Resources/views/CRUD/edit_orm_one_association_script.html.twig,当您单击链接add时,它会创建一个新行,具体如下代码所示:

// the ajax post
    jQuery(form).ajaxSubmit({
        url: '{{ url('sonata_admin_append_form_element', {
            'code':      sonata_admin.admin.root.code,
            'elementId': id,
            'objectId':  sonata_admin.admin.root.id(sonata_admin.admin.root.subject),
            'uniqid':    sonata_admin.admin.root.uniqid
        } + sonata_admin.field_description.getOption('link_parameters', {})) }}',
        type: "POST",
        dataType: 'html',
        data: { _xml_http_request: true },
        success: function(html) {

            jQuery('#field_container_{{ id }}').replaceWith(html); // replace the html
            if(jQuery('input[type="file"]', form).length > 0) {
                jQuery(form).attr('enctype', 'multipart/form-data');
                jQuery(form).attr('encoding', 'multipart/form-data');
            }
            jQuery('#sonata-ba-field-container-{{ id }}').trigger('sonata.add_element');
            jQuery('#field_container_{{ id }}').trigger('sonata.add_element');

        }
    });

    return false;
}; 
我想知道如何实现触发器:

jQuery('#field_container_{{ id }}').trigger('sonata.add_element'); 
添加javascript!在索纳塔类型集合中创建新行后

<script type="text/javascript">
    $(document).ready(function() {
        $('body').on('sonata.add_element','#field_container_{{ admin.uniqid }}_idField', function(e) {
            //Code ...
        });
    });
</script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#field_container_{{ admin.uniqid }}_idField').live('sonata.add_element', function(e) {
            //Code ...
        });
    });
</script>
文件中说: 提示:在添加(添加了sonata集合项)或删除(删除了sonata集合项)行后,将触发jQuery事件。您可以绑定到它们以触发一些导入到模板中的自定义javascript(例如:向刚刚添加的日期字段添加日历小部件)

欢迎任何帮助

只要做一个

jQuery('[id^="field_container_"][id$="<insert element name here>"]').live('sonata.add_element', function(event) { alert('foo bar'); })
jQuery('[id^=“field_container”][id$=“”].live('sonata.add_element',函数(事件){alert('foo bar');})

记住首先测试jQuery选择器是否按预期工作。如果您可以设法从Javascript中的表单元素中提取uniqId,则不必使用复杂的
id^=
id$=
选择器。

好的,非常感谢您的回答@Tautrimas Pajaskas,解决方案如下:

 <script type="text/javascript">
    $('div[id$=_empDomicilios]').on('sonata.add_element', function(event) {

        alert('trigger is fired ');
        // insert here your code
    });
 </script> 
jQuery('#field_container_{{ id }}').trigger('sonata.add_element', ['{{ id }}','{{ sonata_admin.admin.root.id(sonata_admin.admin.root.subject) }}', '{{ sonata_admin.admin.root.uniqid }}']); 
然后,您的javascript代码如下所示:

<script type="text/javascript">
    $('div[id$=_empDomicilios]').on('sonata.add_element', function(event, elementId, objectId, uniqid) {

            alert('trigger is fired '):
            alert('ElementId: '+ elementId);
            alert('ObjectId: '+ objectId);
            alert('Uniqid: '+ uniqid);
            // insert here your code
    });
 </script> 

$('div[id$=\u empDomicilios]')。on('sonata.add\u element',function(event,elementId,objectId,uniqid){
警报('触发触发器'):
警报('ElementId:'+ElementId);
警报('ObjectId:'+ObjectId);
警报('Uniqid:'+Uniqid);
//在这里插入您的代码
});

注意:我在示例中使用了一个div,其id属性值以“\u empDomicilios”结尾。

对于jQuery>=1.7,您可以使用此方法,其中idField是sonataAdmin集合中使用的名称

<script type="text/javascript">
    $(document).ready(function() {
        $('body').on('sonata.add_element','#field_container_{{ admin.uniqid }}_idField', function(e) {
            //Code ...
        });
    });
</script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#field_container_{{ admin.uniqid }}_idField').live('sonata.add_element', function(e) {
            //Code ...
        });
    });
</script>

$(文档).ready(函数(){
$('body').on('sonata.add_element','field_container'{{admin.uniqid}}}}u idField',函数(e){
//代码。。。
});
});
对于jQuery<1.7,可以使用此方法,其中idField是sonataAdmin集合中使用的名称

<script type="text/javascript">
    $(document).ready(function() {
        $('body').on('sonata.add_element','#field_container_{{ admin.uniqid }}_idField', function(e) {
            //Code ...
        });
    });
</script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#field_container_{{ admin.uniqid }}_idField').live('sonata.add_element', function(e) {
            //Code ...
        });
    });
</script>

$(文档).ready(函数(){
$('#field_container'{{admin.uniqid}}}{u idField').live('sonata.add_element',function(e){
//代码。。。
});
});

使用完整的选择器,您将避免运行两次代码。

直到我从
$(document).ready()中取出代码并将其调整为

$(document).on('sonata.add_element', function() {
    console.log('toto');
});`

很抱歉使用
.live()
方法。完全忘记了。是的,如果你能触发sonata.add_element
和参数,它可以更容易地获取上下文数据,但是默认触发器不发送数据。你知道如何在脚本模板中获取父admin类的uniqid吗,如我的问题中所述?