2017-07-27 27 views
0

我有一个按钮“添加”,在窗体中添加div。使用Javascript添加div的Javascript

在div中添加,也会有JavaScript(1选择哪个取决于另一个选择)。

我使用Symfony2中,为了增加DIV我用的Symfony文档:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var $container = $('div#mybundle_serveur_typesDetails'); 
     var $addLink = $('<a href="#" id="add_type" class="">Ajouter un type</a>'); 
     $container.append($addLink); 
     $addLink.click(function(e) { 
      addSource($container); 
      e.preventDefault(); // évite qu'un # apparaisse dans l'URL 
      return false; 
     }); 

     var index = $container.find(':input').length; 

     if (index == 0) { 
      addSource($container); 
     } else { 
      $container.children('div').each(function() { 
       addDeleteLink($(this)); 
      }); 
     } 

     function addSource($container) { 
      var $prototype = $($container.attr('data-prototype').replace(/__name__label__/g, 'type n°' + (index+1)) 
       .replace(/__name__/g, index)); 

      addDeleteLink($prototype); 
      $container.append($prototype); 
      index++; 
     } 

     function addDeleteLink($prototype) { 
      $deleteLink = $('<a href="#" class="btn btn-danger">Supprimer</a>'); 

      $prototype.append($deleteLink); 

      $deleteLink.click(function(e) { 
       $prototype.remove(); 
       e.preventDefault(); // évite qu'un # apparaisse dans l'URL 
       return false; 
      }); 
     } 
    }); 
</script> 

而且在申报单的JavaScript是:通过第一个脚本创建

<script> 
    var $all = $('.type_js'); 
    $all.each(
     function() { 
      $(this).change(function() { 
       var parent = $(this).attr("id"); 
       var array_id = parent.split("_"); 
       var id = array_id[3]; 
       var $detail = $('#mybundle_serveur_typesDetails_'+id+'_detailType'); 
       $.post(" {{ path('updateDetailType') }}", { idType: $(this).val()}, function (data) { 
        $detail.find('option').remove(); 
        if(data.length > 0) { 
         for (i in data) { 
          var option = $('<option></option>').attr('value', data[i][0]).text(data[i][1]); 

          $detail.append(option); 
         } 
        } 
        else { 
         var option2 = $('<option></option>').attr('value', null).text('-- Choisir une zone --'); 
         $detail.append(option2); 
        } 
       }, 'json'); 
      }); 
     } 
    ); 
</script> 

的div有一个类'type_js',我用这个类对每个div进行change()调用。

但是,如果我通过第一个脚本创建一个div,divs有类'type_js',但没有任何事情发生......我是JS和JQuery的新手,但我猜JavaScript是在页面创建时加载的,在这个时刻divs不在那里。

您将如何使其工作?有没有办法让他在调用第一个脚本后重新加载JavaScript?

谢谢!

+0

使用[事件团](http://learn.jquery.com/events/event-delegation/)的方式,动态地生成的元素时,即'$(文件).on('change','。type_js',function(){var parent = $(this).attr(“id”); .....});' – Satpal

+1

@Satpal thanks !!! –

回答

0

的解决方案是使用Event Delegation

<script> 

    $(document).on("change", ".type_js", function() { 

     var parent = $(this).attr("id"); 
     var array_id = parent.split("_"); 
     var id = array_id[3]; 
     var $detail = $('#mybundle_serveur_typesDetails_'+id+'_detailType'); 
     $.post(" {{ path('updateDetailType') }}", { idType: $(this).val()}, function (data) { 
      //$zone.remove(); 
      //$quartier.clean(); 
      $detail.find('option').remove(); 
      if(data.length > 0) { 
       for (i in data) { 
        var option = $('<option></option>').attr('value', data[i][0]).text(data[i][1]); 

        $detail.append(option); 

       } 
      } 
      else { 
       var option2 = $('<option></option>').attr('value', null).text('-- Choisir une zone --'); 
       $detail.append(option2); 

      } 
     }, 'json'); 
    }); 

</script>