2017-12-06 6 views
0

私は開くことcjuidialogをトリガーする多数のリンクを含むページを持っている:「ダブル」イベントのダブルバインドを回避するにはどうすればよいですか?

<?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 } ?> 

これがダイアログをトリガするスクリプトです。ダイアログコンテンツは、AJAX呼び出しで生成されている:

$(".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")。off( 'click')を試してみましたが、イベントのバインドを解除するのには効果がありますが、#files-gridで同じことを試してみました。仕事も同様です。

アイデアを持っている人はいますか?

+0

: \t $(「#ファイルグリッド.delete」)をオフ(「クリック」)。 これは、同じダイアログ内にある間にイベントバインドで同じ問題が発生し、追加/削除したファイルの数に応じてクリックを確認する必要がなくなるという問題を修正しました – kurt

答えて

0

私のアプローチは、新しいバインディングに固有のクラスを「タグ付け」することです。 私はすでにいくつかのデータセットプロパティを使用することを考えていますが、一意のクラスを追加する方が使いやすくなります。 ところで、「オフ(「クリック」)」という使用に関する問題は、既に持っている他のクリックをバインド解除することです。 。二重の削除ボタンのバインディングが既に固定されているところで、それは追加することによって行われた

$('#filtro').not('.bindfiltro').change(function() { 
    $(this).submit(); 
}).addClass('bindfiltro'); 
関連する問題