JQuery - Validacion de datatable

 
Vista:
sin imagen de perfil
Val: 7
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Validacion de datatable

Publicado por Jose (11 intervenciones) el 20/11/2017 02:08:28
Que tal comunidad espero esten bien..

Tengo una inquietud, les explico de manera resumida, tengo un datatable que se esta cargando de manera dinamica usando jquery, este archivo lo cargo a traves de un excel.

Mi datatable: Ya se carga con excel, pagino con plugin de datatable, ya valida cada registro del datatable cuando se hace clic en cada celda.

En este ultimo punto tengo una enorme inquietud ya que no vi ninguna funcion de Jquery que haga lo siguiente:

Yo quisiera que cuando se cargue el Datatable sin necesidad de hacer clic (inicialmente) todo el datatable se valide les muestro un poco de codigo para que me entiendan:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$("td,.edit").on("click", function () {
    var $this = $(this);
    var $id = $this.attr("id");
    var Value = $this.text();
 
    /*Se crea un input dinamico*/
    var $input = $('<input type="text" value="' + Value + '"/>');
 
    /*Finalmente se agrega el input al campo TD y se le crea el foco*/
    $this.html("").append($input);
    $input.focus();
 
    /*Se crea una funcion para indicar que cuando el input pierda el foco ejecute lo siguiente:*/
    $input.on("blur", function () {
 
        var text = $input.val();
        $input.remove();
        $this.text(text);
 
        /*Se envia un ajax con el id y con el valor del input para validarlo en Laravel */
        $.ajax
        ({
            url: './editable',
            type: 'post',
            data: {'id': $id, 'value': text},
            dataType: 'json',
 
            success: function (data) {
                var bandera=data.bandera;
 
                /*Si la bandera es 0 significa que lo agarra la validacion*/
                if(bandera==0)
                {
                    $.each(data.error, function ($index, $contenido) {
                        $this.attr("style","border: solid #ff1b08;");
 
                        $this.tooltip({
                            content:" "+$contenido
                        });
 
                    })
 
                }
                /*Si la validacion es exitosa se quita el marco rojo de error encontrado*/
                else
                {
                    $this.attr("style","border-collapse: separate;");
                    $this.tooltip({
                        content:""
                    });
                }
            },
            error: function (e) {
                alert("Algo sucedio: " + e);
 
            }
 
        })
    }).on("click", function (e) {
        e.stopPropagation()
    });
});

El codigo que tengo aqui

1
$("td,.edit").on("click", function () {

Que se encarga de validar las celdas de cada Datatable se ejecutara de manera automatica al cargar el Datatable, que de una vez me muestre los recuadros pintados en rojo (como estan en mi codigo) pero sin la necesidad de hacer clic (inicialmente) existe alguna funcion que haga eso? no encontre nada parecido en la documentacion jquery.

Espero me puedan dar alguna luz...muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 36
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Validacion de datatable

Publicado por Horroroso (60 intervenciones) el 21/11/2017 17:33:05
Hola, para esto, la solucion es muy simple, solamente crea una funcion, digamos de nombre Verificar que contenga el codigo que esta dentro del click:

1
2
3
4
5
6
7
8
function Verificar() {
 
    var $this = $(this);
    var $id = $this.attr("id");
    var Value = $this.text();
.....
.....
}
Luego, cada ves que quieres que se ejecute lo mandas llamar, digamos al cargar la pagina:
1
Verificar();

y por último, tambien lo asignas al evento Click:

1
$("td,.edit").on("click", Verificar());

Espero haberme explicado.

Saludos.

--Horroroso--
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Validacion de datatable

Publicado por Jose (11 intervenciones) el 21/11/2017 20:44:56
Hola Amigo Horroroso....

Viendo el codigo creo que no funcionaria....el tema es que si te das cuenta cuando invoco el evento clic en el td, de una vez creo una variable $this a la cual le asigno el valor $(this) para especificar lo que ocurrira en ese td especifico cuando yo haga clic.

El asunto aqui es que si yo digo $this=$(this) eso va a ser de quien? ya que no le estoy especificando nada. No se si me entiendes?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 36
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Validacion de datatable

Publicado por Horroroso (60 intervenciones) el 22/11/2017 00:22:07
Ya comprendi tu problema...
Pero tambien tiene solucion, esta es:
La funcion se cambia un poco:
1
2
3
4
5
6
7
8
function Verificar($td) {
 
    var $this = $td;
    var $id = $td.attr("id");
    var Value = $td.text();
.....
.....
}
Luego, para asignarla al evento click:
1
$("td,.edit").on("click", Verificar($(this)));
y por ultimo para cada td:
1
2
3
$("td,.edit").each(function(){
  Verificar($(this))
});

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Validacion de datatable

Publicado por Jose (11 intervenciones) el 22/11/2017 22:25:17
Hola Horroroso, muchas gracias por tu respuesta me ha ayudado bastante, sin embargo te comento lo siguinete quiero que observes el codigo a continuación:

Funcion validar para ejecutarse masivamente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function validar($td)
{
    var $this = $td;
    var $id = $this.attr("id");
    var $text = $this.text();
 
 
        /*Se envia un ajax con el id y con el valor del input para validarlo en Laravel */
    $.ajax
        ({
            url: 'editable',
            type: 'get',
            data: {'id': $id, 'value': $text},
            dataType: 'json'
    }).done(function (data) {
        var bandera=data.bandera;
 
        /*Si la bandera es 0 significa que lo agarra la validacion*/
        if(bandera==0)
        {
            $.each(data.error, function ($index, $contenido) {
                $this.attr("style","border: solid #ff1b08;");
 
                $this.tooltip({
                    content:" "+$contenido
                });
 
            })
 
 
        }
        /*Si la validacion es exitosa se quita el marco rojo de error encontrado*/
        else
        {
            $this.attr("style","border-collapse: separate;");
            $this.tooltip({
                content:""
            });
        }
    })
}

Forma dinámico de como estoy creando el datatable desde Jquery

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.
.
.
.
.
.
 
   $("td,.edit").each(function(){
        validar($(this));
       });
 
   $("td,.edit").on("click", function () {
      validar($(this));
 
    });

Fijate que aquí estoy invocando el each tal como me recomendastes y mas abajo esta el evento para el caso de los clic

1
2
3
4
5
6
$("td,.edit").each(function(){
   validar($(this));
});
$("td,.edit").on("click", function () {
   validar($(this));
});

El asunto es Horroroso que cuando se ejecuta el each en algunos casos me da "error 500" ya que en otros casos hace lo que dice el codigo perfecto, lo mas asombroso es que cuando se ejecuta el evento clic NUNCA da error 500 todo funciona bien.

Por el comportamiento pareciera que fuera algo relacionado con tiempo de respuesta es como si lo hiciera como muy rapido y no le da tiempo...

Existe alguna manera de controlar la peticion ajax o que crees que puede ser el causante de que en algunos casos salga error 500?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 141
Bronce
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Validacion de datatable

Publicado por kip (38 intervenciones) el 30/11/2017 04:06:18
Hola Jose, donde tienes las lineas que muestren como creas este datatable dinamicamente ? Podrías colocarlas ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar