Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   HTML, Javascript y otros (https://www.clubdelphi.com/foros/forumdisplay.php?f=38)
-   -   Habilitar boton html deshabilitado (https://www.clubdelphi.com/foros/showthread.php?t=94887)

jhonalone 22-09-2020 18:10:24

Habilitar boton html deshabilitado
 
Hola, compañeros.
Estoy desarrollando un sistema de facturación.

Tengo en pantalla una DataTable con los artículos en la que cada úno tiene un botón de añadir.

Cuando pulsamos el botón, se añade el artículo a la factura (en confección) y se desactiva el botón de Añadir para no repetir artículos, ya que en las líneas de la factura (en confección) se puede modificar el número de unidades de cada artículo.

El problema surge cuando se elimina un artículo de la factura ( en confección) y se quiere volver a añadir. Pues el botón queda deshabilitado y no se puede.

He intentado resolverlo de mil y una maneras, pero no lo consigo. La última es esta:

Código PHP:

function activa_aniadir(index){

var 
searchText document.getElementsByName("idarticulo[]")[index].value;    
$.
each($('#tblarticulos tbody tr'),function()
{  
    var 
currentRow=$(this);  
        var 
col1_value=currentRow.find("td:eq(5)").text();
       
    if (
col1_value == searchText)
    { 
alert('encontrado id = '+col1_value); // La identificación de la linea ES CORRECTA
        //var boton = currentRow.find("td:eq(0)").button();
        
currentRow('td:eq(0)').button().removeAttribute("disabled");
    
//    alert(currentRow.closest('tr').index());
//    borrar_filas(currentRow.closest('tr').index());    
    //$(this).removeAttribute("disabled");
    
        //alert(boton.name);
        //    boton[0].innerHTML.disabled="false";
    //    var activar = currentRow.find("td:eq(0)");
    //    activar['#addetalle'].prop("disabled",false);
    
}
/*
         indice = busca_fila(index);   
alert('indice = '+indice);
 // aquí me he quedado. ¿como selecciono el boton Añadir de la fila indice 
 // en la lista de articulos para habilitarlo de nuevo?
 // con 
 var table = $('#tblarticulos').DataTable();
 
table.row(':eq(0)', { page: 'current' }).select();
table('addetalle').prop("disabled",false);
*/


});



El código está en Javascript. Lo pongo en PHP para resaltarlo. La solución debe estar en Javascript.

He conseguido identificar la línea de la DataTable de los artículos.

Pero no sé cómo activar el botón. Veréis que he intentado de casi todo (está comentado)

Os pongo también la declaración de cada línea de la DataTable de los artículos:
Código PHP:

case 'listarArticulos':
            require_once 
"../modelos/Articulo.php";
            
$articulo=new Articulo();

                
$rspta=$articulo->listarActivosVenta();
            
$data=Array();

            while (
$reg=$rspta->fetch_object()) {
                
$btncolor='';
                if (
$reg->stock<=10) {
                    
$btncolor='<button class="btn btn-danger btn-xs">'.$reg->stock.'</button>';
                }elseif (
$reg->stock>10 && $reg->stock<30 ) {
                    
$btncolor='<button class="btn btn-warning btn-xs">'.$reg->stock.'</button>';
                }elseif (
$reg->stock>=30) {
                    
$btncolor='<button class="btn btn-success btn-xs">'.$reg->stock.'</button>';
                }
        
// pasamos el tipo_iva de cada artículo para calcularlo en crearventa.js
        
if ($reg->tipo_iva == 'G') {$impuesto = (floatval($_SESSION['iva_G']));}
        else 
        if (
$reg->tipo_iva == 'R') {$impuesto = (floatval($_SESSION['iva_R']));}
        else 
        if (
$reg->tipo_iva == 'S') {$impuesto = (floatval($_SESSION['iva_S']));}

                
$data[]=array(
                
"0"=>'<button class="btn btn-success btn-xs" id="addetalle" name="addetalle" 
onclick="agregarDetalle('
.$reg->idarticulo.',\''.$reg->nombre.'\','.$reg->precio_venta.',
'
.$reg->stock.','.$impuesto.')"><span class="fa fa-plus"></span> Añadir</button>',
                
"1"=>$reg->nombre,
                
"2"=>$reg->codigo,
                
"3"=>$btncolor,
                
"4"=>"<img src='../files/articulos/".$reg->imagen."' height='40px' width='40px'>",
                  
//lo pongo yo jmms para usarlo al activar de nuevo el boton Añadir
                  
"5"=>$reg->idarticulo
                  
);
            }

            
$results=array(
                 
"sEcho"=>1,//info para datatables
                 
"iTotalRecords"=>count($data),//enviamos el total de registros al datatable
                 
"iTotalDisplayRecords"=>count($data),//enviamos el total de registros a visualizar
                 
"aaData"=>$data); 
            echo 
json_encode($results);

                break; 

Necesito vuestra ayuda. Gracias de antemano.
Saludos Cordiales.

dec 23-09-2020 09:37:53

Hola a todos,

De las siguientes dos líneas:

Código PHP:


//var boton = currentRow.find("td:eq(0)").button();
currentRow('td:eq(0)').button().removeAttribute("disabled"); 

... me parece que ninguna es correcta, aunque, con el "button()" me pierdo un poco... La siguiente línea te daría el elemento que buscas (otra cosa es que sea el botón o no)...

Código PHP:


var boton currentRow.find("td:eq(0)");
boton.removeAttr('disabled'); 

Es decir, "find" retornará (si retorna algo, podrías comprobarlo con "boton.length", que debería ser 1) el elemento que buscas (mediante "find") ya en un objeto jQuery, de modo que podrías usar, dierctamente, el método "removeAttr" de dicho objeto.

jhonalone 23-09-2020 21:36:55

Gracias, dec por tu respuesta.
No funcionó.
No te molestes, busco otra solución alternativa.
Siempre un placer saludarte.

dec 24-09-2020 11:32:37

Hola a todos,

Pero, si no funcionó, es porque "currentRow.find("td:eq(0)")" no es el elemento / botón que esperas... ojo porque estás usando un selector, mediante "find" estás buscando un determinado elemento dentro de "currentRow", de hecho ya de entrada (antes no me fijé en ello) se ve que no funcionaría, pues, el elemento que buscas es el primer "td", y, este obviamente no es un botón...

O sea, que, lo que tendrías o podrías hacer es proporcionar un selector correcto a "find", algo como "find('button')", suponiendo que sólo hubiese un botón dentro de "currentRow"... pero también cualquier otro selector acaso más específico, qué sé yo, algo como "find('.my-button')", supuesto que el botón en cuestión tuviese la clase "my-button".


La franja horaria es GMT +2. Ahora son las 11:59:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi