При изменении события в jquery datatable не сработает в динамически нарисованной строке

Вот как я определила свои данные:

$("#table_resultados").DataTable({
    //"paging":   false,
    "ordering": false,
    "info":     false,
    "searching": true,
    "autoWidth": true,
    "language": {
      "lengthMenu": "Mostrar _MENU_ registros. Para Seleccionar, dar click en una fila.",
      "zeroRecords": "No se encontraron registros",
      "info": "Mostrando pagina _PAGE_ de _PAGES_",
      "infoEmpty": "No hay registros disponibles",
      "infoFiltered": "(filtrados de un total de _MAX_ registros)",
      "search": "Buscar:",
      "paginate": {
        "previous": "Previa",
        "next": "Siguiente"
      }
    },
    "order": [[ 1, 'desc' ],[ 7, 'asc' ]],
    "ajax": {
      "url": '<?php echo $enlace_procesar_producto;?>',
      "type": 'POST',                                                       
      /*"data": {
        "operacion": 'query_categoria',
        "id_producto_categoria_padre": $("#categoria2").val(),
        "tipo_codificacion_json": 'JS.JSON'
      }*/
      data: function(d) {
        d.operacion = 'query_categoria_producto';
        d.id_producto_categoria = $("#id_producto_categoria").val();
        d.id_marca = $("#id_marca").val();
        d.tipo_codificacion_json = 'JS.JSON';
      },                            
    },
    "columnDefs": [
      { "targets":[0], className: "dt-body-center", 
        render: function (data, type, row) {
                  var ddl = "<input type='hidden' class='pack_hid_id' value='" + data + "'>";
                  ddl += "<span>" + data + "</span>";
                  return ddl;
                },"width": "10%","searchable": true,        
      }, 
      { "targets": [2,3,4,5,6,8,9,10,13,14,15,16,17,18,19,20,21,22,23,24], "visible": false, "searchable": false },
      { "targets": [1], "visible": true, "searchable": true, "width":"20%",
        "render": function (data, type, row) {                      
                    return row[20];
                  }                 
      },
      { "targets": [7], "visible": true, "searchable": true, "width": "40%", "orderable": true },               
      { "targets": [11], "visible": true, "searchable": false, className: "dt-body-center"},
      {
        "targets": [12], "visible":true, 
        "render": function (data, type, row) {
                    $ddl = Number(row[12]).toFixed(2) + " " + row[15];
                    $ddl += "<select class='prueba'><option>1</option><option>2</option></select>"
                    return $ddl;
                  }, "width": "30%", "className":"dt-body-center" 
      }                         
    ],
    "columns": [
      {},
      {},
      {     /*render: function (data, type, row) {
                        var ddl = "<select size='1' id='row-1-division' name='row-1-division' class='cat_flag_habilitado'>";
                        ddl += "<option value='" + data+ "'>"+ data + "</option>";
                        ddl += "<option value='0'>X</option>";
                        ddl += "</select>";
                        return ddl;
                      }*/
      },
    ],
    rowCallback: function (row, data) {

  }                     
});

Просто для целей тестирования я добавил, что <select> с class="prueba", однако, когда я реализую инициирующее событие:

$(".prueba").on("change", function () {
    alert("Hola");
});

никакой поп-музыки не выходит!!

Это не моя версия JQuery или отсутствует JS, как я знаю?? Код ниже работает.

$('#table_resultados tbody').on( 'click', 'tr', function () {
    $id_producto_pack = $(this).closest("tr").find(".pack_hid_id").val();

    if ( $(this).hasClass('selected') ) {
        $(this).removeClass('selected');
        $("#id_producto_pack").val(0);
    }
    else {
        $("#table_resultados tr.selected").removeClass('selected');
        $(this).addClass('selected');

        $("#id_producto_pack").val($id_producto_pack);                  
    }

    $("#div_pack_detalle").dialog("open");
    $tabla = $("#table_pack_detalle_resultados").DataTable();
    $tabla.ajax.reload( null, false ); 
} );

Любая подсказка?

2 ответа

Решение

Это потому, что ваш динамически созданный список выбора не имеет привязки к событию.

Вы можете добавить привязку в таблицу данных RowCallback, что-то вроде этого:

rowCallback: function (row, data) {
    var element = $(row).find('.prueba');
    element.on("change", function () {
        alert("Hola");
    });
} 

То, что также работало для меня, было переопределением события "onchange" следующим образом:

    $("#table_resultados").on("change",".prueba", function () {});

Это полностью сработало! Спасибо за помощь ребята.

Другие вопросы по тегам