2017-12-06 18 views
0

내가 열려면 cjuidialog를 트리거 다수의 링크가 포함 된 페이지있어 :'double'이벤트 이중 바인딩을 피하는 방법은 무엇입니까?

<?php foreach($client->assignments as $clientProjects) { ?> 
    [...] 
    <a href="javascript:void(0);" 
     id="attach_file_project_<?=$clientProjects['project_id']?>" 
     class="attach_timesheet_file" 
     data-id="<?=$clientProjects['project_id']?>" 
     data-week-start="<?=$client->clientWeek[0]?>" 
     data-week-end="<?=$client->clientWeek[6]?>" 
    >Attach File</a> 
    [...] 
<?php } ?> 

이 대화 상자를 트리거하는 스크립트입니다. 대화 내용은 아약스 호출에서 생성되는 :

$(".attach_timesheet_file").off('click').on("click", function(e) { 
    e.preventDefault(); 
    $('#files-grid .delete').off('click'); 
    var id = $(this).data("id"); 
    var weekStart = $(this).data("week-start"); 
    var weekEnd = $(this).data("week-end"); 
    var url = "<?=Yii::app()->createUrl('admin/timesheetNew/attachTimesheet')?>"; 
    $.ajax({ 
     type: 'GET', 
     url:url + "?id=" + id + "&week_start=" + weekStart + "&week_end=" + weekEnd, 
     success: function(data) { 
      var modal = $("#attachFileModal"); 
      modal.html(data); 
      modal.dialog('open'); 
      return true; 
     } 
    }) 
}); 

대화는 & 삭제 파일을 추가 할 수 있습니다. 대화 상자 내부 , 나는 삭제 링크를 포함하는 CGridView 위젯을 사용하고 있습니다 :

$this->widget('zii.widgets.grid.CGridView', [ 
    'id' => 'files-grid', 
    'dataProvider' => $dataProvider, 
    'columns' => [ 
     [...] 
     [ 
      'class' => 'CButtonColumn', 
      'template' => '{delete}', 
      'buttons' => [ 
       'delete' => [ 
        'label' => 'Delete', 
        'imageUrl' => null, 
        'url' => 'Yii::app()->createUrl("admin/timesheetNew/deleteFile", ["id" => $data["id"]])' 
       ] 
      ], 
      'deleteConfirmation' => 'Are you sure you want to delete this file?', 
      'afterDelete' => 'function(){ 
       $("#files-grid").yiiGridView("update"); 
      }' 
     ] 
    ] 
]); 

내가 열고 닫고 다시 열고 대화를 할 때 내가 직면 해요 문제는, 내가 삭제하려면 파일, 대화 상자를 열 때마다 확인 단추를 여러 번 클릭해야합니다.

$ ("attach_timesheet_file"). 벗어났습니다 ('클릭'). 이벤트 바인딩을 해제하는 데는 효과가 있지만 도움이되지 않았고 #files-grid에도 동일하게 시도했습니다 .delete didn ' 또한 잘 작동합니다.

아이디어가 있습니까?

+0

이미 추가가 이루어졌다, 고정 : \t $를 ('# 파일 그리드 .delete') 오프 ('클릭'). 동일한 대화 상자에있는 동안 이벤트 바인딩에 동일한 문제가 발생하여 추가/삭제 한 파일 수에 따라 점점 더 많은 확인을 클릭해야하는 문제가 해결되었습니다. – kurt

답변

0

내 접근 방식은 고유 한 클래스로 새 바인딩을 "태그 지정"합니다. 이미 일부 데이터 집합 속성을 사용하는 것에 대해 생각하지만 독특한 클래스를 추가하는 것이 사용하기가 더 쉽습니다. 그건 그렇고, "off ('click')"사용에 관한 문제는 이미 가지고있는 다른 클릭을 바인딩 해제한다는 것입니다. 이중 삭제 버튼 바인딩 BTW

$('#filtro').not('.bindfiltro').change(function() { 
    $(this).submit(); 
}).addClass('bindfiltro');