Validación de datos nulos en una función – javascript

Pregunta:


Tengo la siguiente función pero al momento validar todos mis datos me los registra todos a excepción del los “containers” que son grids y al momento de validarlos en vez de validar grid por grid me lo registra como un todo. Quise hacerlo como un Array pero tampoco, hay alguna manera alternativa de hacer esto?
posdata: uso la librería de dhtmlx.

function verificaDatos(callback) {
var itemsArray  = new Array();
var vacios      = "";

formFormularios.forEachItem(function(id) {
    if (formFormularios.getUserData(id,'class') !== "ignore" && (formFormularios.getItemType(id) === "container" || formFormularios.getItemType(id) === "input" || formFormularios.getItemType(id) === "checkbox" || formFormularios.getItemType(id) === "calendar" || formFormularios.getItemType(id) === "combo" || formFormularios.getItemType(id) === "hidden" || formFormularios.getItemType(id) === "editor" || formFormularios.getItemType(id) === "radio")) {
        var type = formFormularios.getItemType(id);

        if (type == "input") {
            if (formFormularios.getItemValue(id) == "") {
                itemsArray.splice(id);
                vacios += formFormularios.getItemLabel(id) + "|";
            }
        }
        else if (type == "combo") {
            if (formFormularios.getCombo(id).getSelectedValue() == "") {
                itemsArray.splice(id);
                vacios += formFormularios.getItemLabel(id) + "|";
            }
        }
        else if (type == "calendar") {
            if (formFormularios.getItemValue(id, true) == "") {
                itemsArray.splice(id);
                vacios += formFormularios.getItemLabel(id) + "|";
            }
        }
        else if (type == "container") {
            if (hermanosGrid.getRowsNum() < 1) {
                itemsArray.splice(id);
                vacios += formFormularios.getItemLabel(id) + "|";
            }
            else if (gradosGrid.getRowsNum() < 1) {
                itemsArray.splice(id);

                vacios += formFormularios.getItemLabel(id) + "|";
            }
            else if (guarderiaGrid.getRowsNum() < 1){
                    itemsArray.push(id);
                    vacios += formFormularios.getItemLabel(id) + "|";
            }
            else if (estimulacionGrid.getRowsNum() < 1){
                    itemsArray.splice(id);
                    vacios += formFormularios.getItemLabel(id) + "|";
            }
            else if (viajesGrid1.getRowsNum() < 1) {
                itemsArray.splice(id);
                vacios += formFormularios.getItemLabel(id) + "|";
            }
            else if (viajesGrid2.getRowsNum() < 1) {
                itemsArray.splice(id);
                vacios += formFormularios.getItemLabel(id) + "|";
            }
        }
    }
});
vacios = vacios.substr(0, (vacios.length - 1));

if (itemsArray.length > 0) {
    showEmptyFields(vacios,itemsArray.length);
}
else {
    if (callback && typeof(callback) == "function") { 
        callback();
    }
}
}

Preguntado por: Cris Valdez

ArtEze

Lo que hice fue simplificar el código y cambiar los if else por solo if.

No es buena tarea copiar y pegar el código muchas veces, porque después pueden venir problemas, por ejemplo esto.

itemsArray.splice(id);
vacios += formFormularios.getItemLabel(id) + "|";

Otras cosas que hice fueron independizar la función callback, y crear un for para los or, que vendrían a ser una especie de opciones, sería algo como, es falso hasta que alguno sea verdad.

Código final.

function comprobar(id,formFormularios)
{
    var devuelve
    var booleano_1=formFormularios.getUserData(id,'class')==="ignore"
    var booleano_2=false
    var condiciones=[
        "container","input","checkbox","calendar",
        "combo","hidden","editor","radio"
    ]
    for(var i=0;i<condiciones.length;i++)
    {
        var actual=formFormularios.getItemType(id)===condiciones[i]
        if(actual){booleano_2=true}
    }
    devuelve=booleano_1&booleano_2
    return devuelve
}
function itera(id,formFormularios,itemsArray,vacios)
{
    var condición=comprobar(id,formFormularios)
    if(condición)
    {
        var type = formFormularios.getItemType(id);
        var booleano=false
        var condiciones=[
            "hermanosGrid","gradosGrid","guarderiaGrid",
            "estimulacionGrid","viajesGrid1","viajesGrid2"
        ]
        for(var i=0;i<booleano.length;i++)
        {
            var actual=eval(condiciones[i]).getRowsNum()<1
            if(actual){booleano=true}
        }
        if(
            type=="input"&formFormularios.getItemValue(id)==""
            |type=="combo"&formFormularios.getCombo(id).getSelectedValue()==""
            |type=="calendar"&formFormularios.getItemValue(id,true)==""
            |type == "container"&booleano
        )
        {
            itemsArray.splice(id)
            vacios+=formFormularios.getItemLabel(id)+"|"
        }
    }
    return {itemsArray:itemsArray,vacios:vacios}
}
function verificaDatos(callback)
{
    var funciónGenerada,resultado
    var itemsArray=[]
    var vacios= ""
    var variables=[id,formFormularios,itemsArray,vacios]
    var cadena="return itera("
    for(var i=0;i<variables.length;i++)
    {
        cadena+=JSON.stringify(variables[i])
        if(i<variables.length-1){cadena+=+","}
    }
    cadena+=")"
    funciónGenerada=Function(cadena)
    resultado=formFormularios.forEachItem(funciónGenerada)
    itemsArray=resultado.itemsArray
    vacios=resultado.vacios
    vacios=vacios.substr(0,(vacios.length-1))
    if(itemsArray.length>0)
    {
        showEmptyFields(vacios,itemsArray.length)
    }
    else
    {
        if(callback&&typeof(callback)=="function")
        { 
            callback()
        }
    }
}
;

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *