Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

558
Visualizações
jqgrid: verificación de selección múltiple y deshabilitación (condicional)


Me encanta jqGrid, pero a veces las cosas parecen más complicadas de lo que deberían ser.
Lo que me gustaría lograr es tener una casilla de verificación en cada fila para que un usuario pueda elegir qué filas se enviarán/procesarán.
Sin embargo, necesito bloquear algunas casillas de verificación porque el usuario no tiene autorización en esa fila en particular, tal vez.

Intenté configurar multiselect: true y luego intenté ocultar la casilla de verificación:

 loadComplete: function (data) { if (data.rows.length > 0) { for (var i = 0; i < data.rows.length; i++) { if (data.rows[i].cell[7] == 'false') { $("#jqg_OrdersGrid_" + data.rows[i].id).css("visibility", "hidden"); } } } },

y funciona bien pero, aún así, .jqGrid('getGridParam', 'selarrrow') me da las filas seleccionadas, incluso si no se han verificado.
¿Hay alguna otra forma de tener casillas de verificación que estén habilitadas/deshabilitadas y una forma de saber cuáles se han marcado?

Gracias

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Le sugiero que deshabilite algunas casillas de verificación del atributo "deshabilitado". Para hacer una implementación completa, necesitará

  1. establecer "deshabilitado" dentro del identificador de evento loadComplete
  2. además, evita la selección de filas deshabilitadas dentro del controlador de eventos beforeSelectRow
  3. tener soporte para la casilla de verificación "seleccionar todo" en el encabezado de la columna de selección múltiple implementar el controlador de eventos onSelectAll que corrige la selección de filas deshabilitadas.

La demo correspondiente se puede ver aquí . La parte más importante del código está aquí:

 var grid = $("#list10"), i; grid.jqGrid({ //... loadComplete: function() { // we make all even rows "protected", so that will be not selectable var cbs = $("tr.jqgrow > td > input.cbox:even", grid[0]); cbs.attr("disabled", "disabled"); }, beforeSelectRow: function(rowid, e) { var cbsdis = $("tr#"+rowid+".jqgrow > td > input.cbox:disabled", grid[0]); if (cbsdis.length === 0) { return true; // allow select the row } else { return false; // not allow select the row } }, onSelectAll: function(aRowids,status) { if (status) { // uncheck "protected" rows var cbs = $("tr.jqgrow > td > input.cbox:disabled", grid[0]); cbs.removeAttr("checked"); //modify the selarrrow parameter grid[0].p.selarrrow = grid.find("tr.jqgrow:has(td > input.cbox:checked)") .map(function() { return this.id; }) // convert to set of ids .get(); // convert to instance of Array } } );

ACTUALIZADO: jqGrid gratuito admite la devolución de llamada hasMultiselectCheckBox , que se puede usar para crear casillas de verificación de selección múltiple, no para todas las filas de jqGrid. Uno puede usar rowattr para deshabilitar algunas filas adicionalmente. Como resultado, se obtendrá la funcionalidad descrita anteriormente de una forma más sencilla. Se recomienda usar la opción multiPageSelection: true adicionalmente para jqGrid gratis con datos locales (tipo de datatype: "local" o loadonce: true ). La opción multiPageSelection: true mantendrá la matriz selarrrow en la paginación. Permite "preseleccionar" algunas filas llenando las identificaciones correspondientes en selarrrow . Consulte la parte ACTUALIZADA de la respuesta y la respuesta con la demostración para obtener información adicional.

over 4 years ago · Santiago Trujillo Relatório

0

Gran respuesta de Oleg, también agregaría código para anular la selección de filas deshabilitadas, complete la función onSelectAll a continuación.

 onSelectAll: function(aRowids,status) { if (status) { // uncheck "protected" rows var cbs = $("tr.jqgrow > td > input.cbox:disabled", grid[0]); cbs.removeAttr("checked"); //modify the selarrrow parameter grid[0].p.selarrrow = grid.find("tr.jqgrow:has(td > input.cbox:checked)") .map(function() { return this.id; }) // convert to set of ids .get(); // convert to instance of Array //deselect disabled rows grid.find("tr.jqgrow:has(td > input.cbox:disabled)") .attr('aria-selected', 'false') .removeClass('ui-state-highlight'); } }
over 4 years ago · Santiago Trujillo Relatório

0

He encontrado una solución alternativa. Durante el evento loadComplete, deshabilito la casilla de verificación SelectAll: no la necesito. También oculto la casilla de verificación y la deshabilito.

 loadComplete: function (data) { $("#cb_OrdersGrid").css("visibility", "hidden"); if (data.rows.length > 0) { for (var i = 0; i < data.rows.length; i++) { if (data.rows[i].cell[7] == 'false') { $("#jqg_OrdersGrid_" + data.rows[i].id).css("visibility", "hidden"); $("#jqg_OrdersGrid_" + data.rows[i].id).attr("disabled", true); } } } }

Ahora, cuando quiero enviar mis datos, recorro las filas seleccionadas y verifico si han sido deshabilitadas y coloco las que están habilitadas en una nueva matriz.

 var selectedRows = myGrid.jqGrid('getGridParam', 'selarrrow'); var checkedRows = []; var selectionLoop = 0; for (var x = 0; x < selectedRows.length; x++) { var isDisabled = $('#jqg_OrdersGrid_' + selectedRows[x]).is(':disabled'); if (!isDisabled) { checkedRows[selectionLoop] = selectedRows[x]; selectionLoop++; } }

Lo que he logrado ahora es poder seleccionar una fila condicionalmente pudiendo verificarla o no.
Sé que el código no está optimizado (perdóname Oleg) pero lo haré más tarde.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda