2017-01-20 11 views
-2

チェックボックスをクリックすると、データベースの 'アーカイブ'値を更新しようとしています。サイトとGoogleを検索した後、私はそれをやった。 しかし、2番目の記事を追加すると、最初の記事のみが機能します。あなたがアイデアを持っているなら、私は感謝します! ありがとうございます 私はfosjsroutingbundleをインストールしました。ここSymfony 2 - クリック時のデータベースの更新

は私のコントローラである。

public function archiveAction($id, Request $request) 
{ 

    if ($request->isXmlHttpRequest()) { 

     $em = $this->getDoctrine()->getManager(); 
     $glasse = $em->getRepository('SosMontagesBundle:Glasse')->find($id); 
     $glasseArchiveStat = $glasse->getArchive(); 

     if ($glasseArchiveStat == false) { 
      $glasse->setArchive(true); 
      $em->flush(); 
     } else { 
      $glasse->setArchive(false); 
      $em->flush(); 
     } 

     return new Response('d'); 

    } 


} 

マイルート:

sos_montage_archive: 
path: /admin/archive/{id} 
defaults: { _controller: SosMontagesBundle:Admin:archive } 
requirements: 
    id: \d+ 
options: 
    expose: true 

マイビュー:

{% extends '@SosMontages/layout.html.twig' %} 

{%ブロック含量%}

<div class="col-md-6 col-md-offset-3"> 
    <h2>Liste des lunettes</h2> 
    <table class="table table-striped"> 
     <thead> 
     <tr> 
      <th>Id</th> 
      <th>Marque - Model</th> 
      <th>Description</th> 
      <th>Archive</th> 
      <th>Ordre</th> 
      <th>Actions</th> 

     </tr> 
     </thead> 
     <tbody> 
     {% for article in pagination %} 
      <tr {% if loop.index is odd %}class="color"{% endif %}> 
       <td>{{ article.id }}</td> 
       <td>{{ article.name ~ ' - ' ~ article.brand }}</td> 
       <td>{{ article.content }}</td> 
       {% if article.archive == false %} 
        <td><input type="checkbox" name="{{ article.id }}" id="archive"></td> 
       {% else %} 
        <td><input type="checkbox" name="{{ article.id }}" id="archive" checked></td> 
       {% endif %} 
       <td></td> 
       <td><a href=""><i class="fa fa-pencil fa-2x" aria-hidden="true"></i></a> 
        <a href=""><i class="fa fa-trash-o fa-2x" aria-hidden="true"></i></a></td> 

      </tr> 
     {% endfor %} 

     </tbody> 
    </table> 
    <div class="navigation"> 
     {{ knp_pagination_render(pagination) }} 
    </div> 
</div> 

{%の末端ブロック%} { のjavascript%%ブロック}

<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script> 
<script src="{{ path('fos_js_routing_js', { callback: 'fos.Router.setData' }) }}"></script> 
<script> 
    $(document).ready(function() { 
     $("#archive").click(function() { 

      var id = $("#archive").attr('name'); 


      var DATA = 'sentValue=' + id; 
      $.ajax({ 
       type: "POST", 
       url: Routing.generate('sos_montage_archive', { id: id }), 
       data: DATA, 
       cache: false, 
       success: function (data) { 
        alert("database has been updated"); 

       } 
      }); 
     }); 

    }); 

</script> 

{%の末端ブロック%}あなたのチェックボックスに

+0

これは基本的なHTML **です**。同じIDを持つ複数の要素を持つことはできません。これらのチェックボックスにcssクラスを割り当て、IDの代わりに 'click'アクションをフックします。 – yivi

答えて

0

あなたのクリックlistennerが正しくない可能性があります。変更リスナーはチェックボックスのまま使用してください。 jsのクリック機能を変更して変更してください:

$('#archive').change(function() { 
    if($(this).is(":checked")) { 
     //'checked' event code 
     return; 
    } 
    //'unchecked' event code 
}); 

ただし、2つのチェックボックスと1つのみのIDがあります。これは奇妙なバグを引き起こすかもしれません。あなたのIDを#archive1と#archive2に変更すると、コードが修正されることがあります。

+0

あなたの答えはThanxです。 しかし、私の名前は、小枝の意見のためにブーを使って自動生成されます。 – Emnoze

+0

次に、代わりにクラス名として#archiveを入れてみることができますか? –

関連する問題