weixin_33682719 2017-07-25 12:32
浏览 11

嵌入式形式的JavaScript

Let's say I have an entity User.

The User can have many Address.

In Address There's 2 fields :

  • Country
  • State

What I want :

  • When the user create his account, he can add as many address as he wants.
  • When the user select a Country, it populate the State field based on the country.

What I've done :

UserType :

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('address', 'collection', array(
            'type' => new AddressType(),
            'allow_add' => true,
            'allow_delete' => true))
    //...
}

The Javascript to add address (which is working : based on symfony doc):

<script type="text/javascript">
    $(document).ready(function() {
        var $container = $('div#mybundle_user_address');
        var $addLink = $('<a href="#" id="add_source" class="">Add address</a>');
        $container.append($addLink);

        $addLink.click(function(e) {
            addAddress($container);
            e.preventDefault(); 
            return false;
        });

        var index = $container.find(':input').length;
        $container.children('div').each(function() {
            addDeleteLink($(this));
        });

        function addAddress($container) {
            var $prototype = $($container.attr('data-prototype').replace(/__name__label__/g, 'Address n°' + (index+1))
                .replace(/__name__/g, index));
            addDeleteLink($prototype);
            $container.append($prototype);
            index++;
        }

        function addDeleteLink($prototype) {
            $deleteLink = $('<a href="#" class="btn btn-danger">Delete</a>');
            $prototype.append($deleteLink);
            $deleteLink.click(function(e) {
                $prototype.remove();
                e.preventDefault(); 
                return false;
            });
        }
    });
</script>

Ok, but now, How do I add I call a .change() on the select created after clicking on "add address" ?

Because if you add many address, divs will have this name :

  • #mybundle_user_address_0_country
  • #mybundle_user_address_1_country
  • #mybundle_user_address_2_country
  • ...

So how do I select the div to have a .change() call of these divs ? And where do I put the javascript ? Inside the first javascript when I add divs ? Or outside ?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号
    • ¥50 安装pyaudiokits失败
    • ¥15 计组这些题应该咋做呀
    • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
    • ¥15 让node服务器有自动加载文件的功能