Does not load image in div - Javascript

1

I have to perform the following operation:

I have a form in which I fill in all the data and when I press the "Save" button the user's name must be loaded in a so-called "list". Well, this is done correctly.

The problem comes when I want to delve into this div:

In addition, the list of characters in the listed layer will be updated, taking the data from the Repository instance. For each Character will be displayed:

  • A "character" class layer, within which we have:
  • An image that represents the character
  • The name of it

Information necessary to do it, the div is called "list" and the CSS code for this it is the following:

.personaje{
    border:2px solid #00793D;
    width:200px;
    display:inline-block;
    margin:10px;
    background-color:white;
    padding:10px;
}

.personaje img{
    width:150px;
    height:225px;
}

.personaje p{
    text-align:center;
}

Why do not you show me the image in the div listed? Where is the error?

Javascript code Repository class (works OK, I've done test cases):

/* Definición de Repositorio de personajes */
function Repositorio(){
    //Creamos un array de personajes.
    this.arrayPersonajes = new Array();

    //Devuelve el número total de personajes.
    this.getNumero = function(){
        return this.arrayPersonajes.length;
    }

    //Añade un personaje al array.
    this.addPersonaje = function (personaje){
        this.arrayPersonajes.push(personaje);
    }

    //Devuelve el objeto Personaje que coincide con el nombre.
    this.getPersonaje = function (nombre){
        return this.arrayPersonajes[nombre];
    }

    //Muestra los nombres de los personajes creados.
    this.getNombrePersonaje = function (i){
        return this.arrayPersonajes[i].nombre;
    }

    //Elimina el personaje cuyo nombre coincide con el que se pasa como parametro.
    this.eliminaPersonaje = function (nombre){
        for(var i=0; i<this.arrayPersonajes.length; i++){
            if(this.arrayPersonajes[i].nombre == nombre){
                this.arrayPersonajes.splice(i,1);
                return true;
            }
        }
        return false;
    }

    //Comprueba si existe un personaje cuyo nombre se pasa por parámetro.
    this.existePersonaje = function (nombreRecibido){
        for(var i=0; i<this.arrayPersonajes.length; i++){
            var nombre = this.arrayPersonajes[i].nombre;
            if(nombre == nombreRecibido)
                return true; //return this.arrayPersonajes[i];
        }
        return false;
    }
}

Code Javascript class Form (main code):

/*Creo un objeto/instancia de la clase Repositorio.*/
var miRepositorio = new Repositorio();

/*Registro un evento para cuando termine de cargarse el documento se cargen los eventos necesarios.*/
window.addEventListener('load', iniciar, true);

//Función que se ejecuta tras cargarse el documento y registra el resto de eventos.
function iniciar(){
    //Evento para validar los campos y comprobar que los datos son correctos, así como también guardar un personaje en el repositorio.
    document.getElementById('guardar').addEventListener('click', guardarPersonaje, false);
    //Evento para eliminar un personaje del repositorio. Si coincide el nombre lo eliminamos, sino mensaje de "No encontrado".
    document.getElementById('eliminar').addEventListener('click', eliminarPersonaje, false);
    //Evento para limpiar todos los campos del formulario.
    document.getElementById('limpiar').addEventListener('click', limpiar, false);
}


/******************************************************************************
 **************** FUNCIONES PARA LA COMPROBACIÓN DE LOS CAMPOS ****************
 ******************************************************************************/

//Función que se encarga de validar los campos del formulario.
function guardarPersonaje(evento){
    //Valido los diferentes apartados del formulario. Si todo está OK...
    if (validarCamposText(this) && comprobarNombre() && comprobarImagen() && comprobarEdad() && comprobarColor() && confirm("¿Deseas enviar el personaje?")){
        var nombre = document.getElementById('nombre').value;
        var imagen = document.getElementById('imagen').value;
        var edad = document.getElementById('edad').value;
        var color = document.getElementById('color').value;

        //Creamos el objeto de tipo Personaje con los valores del formulario pasados como parámetros.
        var personaje = new Personaje(nombre, imagen, edad, color);

        //Comprobamos si existe el nombre del personaje en nuestro repositorio...
        if(miRepositorio.existePersonaje(nombre)){
            //Si existe el nombre ya en el arrayPersonajes...
            document.getElementById("informacion").innerHTML="EL PERSONAJE '"+nombre+"' YA EXISTE.";
            limpiar();
        }else{ //Si no existe el nombre del personaje en el repositorio, lo agregamos.
            //Añadimos el personaje al repositorio. Automáticamente lo añade en el array "arrayPersonajes".
            miRepositorio.addPersonaje(personaje);
            //Mostramos los personajes en el div "listado".
            mostrarPersonajes();
            //Si se ha insertado correctamente la información, mensaje de que el personaje fue agregado.
            document.getElementById("informacion").innerHTML="EL PERSONAJE '"+nombre+"' SE HA INSERTADO CORRECTAMENTE.";
            limpiar();
            return true;
        }
    }else{
        //Cancelar el evento por defecto del envío del formulario.
        evento.preventDefault();
        return false;
    }
}


//Función para validar todos los campos input de tipo "text".
function validarCamposText(objeto){
    //La propiedad form del botón enviar contiene la referencia del formulario dónde está ese botón submit.
    var formulario = objeto.form;

    //Recorremos en un array todos los elementos del formulario.
    for (var i=0; i<formulario.elements.length; i++){
        //Eliminamos la clase Error que estaría asignada a algún campo.
        formulario.elements[i].className="";
    }

    //Recorremos en un array todos los elementos del formulario.
    for (var i=0; i<formulario.elements.length; i++){
        //Escogemos los que son de tipo "text" y los que están vacíos...
        if (formulario.elements[i].type == "text" && formulario.elements[i].value.trim()==""){
            //Mostramos en un div, llamado "errores", un mensaje para el usuario de que el campo está vacío.
            document.getElementById("informacion").style.display="block";
            document.getElementById("informacion").innerHTML="EL CAMPO "+formulario.elements[i].name+" NO PUEDE ESTAR VACÍO.";
            formulario.elements[i].className="error";
            formulario.elements[i].focus();
            return false;
        }
    }
    return true;
}

//Función para comprobar que el campo nombre no está vacío.
function comprobarNombre(){
    if (!document.getElementById("nombre").value.trim()==""){
        var nombre = document.getElementById('nombre').value;
        return true;
    }else{
        document.getElementById("informacion").innerHTML="El campo NOMBRE es obligatorio.";
        document.getElementById("nombre").focus();
        return false;
    }
}


//Función para comprobar que el campo imagen no está vacío.
function comprobarImagen(){
    if (!document.getElementById("imagen").value==""){
        var imagen = document.getElementById('imagen').value;
        return true;
    }else{
        document.getElementById("informacion").innerHTML="El campo IMAGEN es obligatorio.";
        document.getElementById("imagen").focus();
        return false;
    }
}


//Función para comprobar que el campo edad no está vacío. Sólo admite dos digitos.
function comprobarEdad(){
    var patron = /^\d{2}$/;
    //Analizamos el patrón.
    if (patron.test(document.getElementById("edad").value)){
        document.getElementById("edad").className="";   
        return true;
    }else{
        document.getElementById("informacion").innerHTML="El campo EDAD es obligatorio.";
        document.getElementById("edad").focus();
        return false;
    }
}


//Función, campo color, que comprueba que no se elige la opción por defecto "Elige uno...".
function comprobarColor(){
    if (document.getElementById("color").value != "none"){ //Para comparar con el texto sería: .text="Elige uno..."
        var color = document.getElementById('color').value;
        return true;
    }else{
        document.getElementById("informacion").innerHTML="El campo COLOR debe elegir una opción.";
        document.getElementById("color").focus();
        return false;
    }
}

//Mostramos los personajes en el div listado.
function mostrarPersonajes(){
    var caja_verde = document.getElementById("listado");
    var img = document.createElement("img");
    if(miRepositorio.getNumero()>=0){
        var codigo = "";
        for(var i=0; i<miRepositorio.getNumero(); i++){
            img.setAttribute("src", "./images/"+miRepositorio.getNombrePersonaje(i)+".png");
            var br = document.createElement("br");
            caja_verde.appendChild(br);
            codigo += miRepositorio.getNombrePersonaje(i)+" ";
        }
        caja_verde.innerHTML = codigo;
    }
}


//Función para limpiar todos los campos del formulario: de tipo "text".
function limpiar(){
    var cajas_texto = document.getElementsByTagName("input");
    for(var i=0; i<cajas_texto.length; i++)
        if(cajas_texto[i] && cajas_texto[i].type == "text")
            cajas_texto[i].value="";    
}


//Función para eliminar un personaje del repositorio. Lo eliminaremos mediante el campo "Nombre".
function eliminarPersonaje(){
    var nombre = document.getElementById('nombre').value;
    //Si existe el nombre en el array "arrayPersonajes", eliminamos el personaje (el objeto completo).
    if(miRepositorio.eliminaPersonaje(nombre)){
        document.getElementById("informacion").innerHTML="EL PERSONAJE '"+nombre+"' SE HA ELIMINADO DE LA TIENDA.";
        //Actualizamos los discos que tenemos en la tienda.
        mostrarPersonajes();
        limpiar();
        return true;
    }else{
        //Si NO EXISTE ningún personaje con ese titulo/nombre, mensaje.
        document.getElementById("informacion").innerHTML="NO EXISTE NINGUN PERSONAJE CON EL NOMBRE '"+nombre+"'.";
        document.getElementById("nombre").focus();
        return false;
    }
}

Required div code from div:

<div class="linea_formulario">
    <label for="nombre">Nombre del personaje</label>
    <input type="text" name="nombre" id="nombre" />
    <div class="limpia"> </div>
</div>  

<div class="linea_formulario">
    <label for="imagen">Imagen</label>
    <input type="text" name="imagen" id="imagen" />
<div class="limpia"> </div>
</div>      

<div id="listado">
    Todavía no tienes ningún personaje.
</div>

There should be an image like the example:

    
asked by omaza1990 08.06.2017 в 12:50
source

1 answer

0

In this function I see that you create an img and br tag, you embed the tag br, but I do not see where you embed the img tag .... I mean that this line would be missing: caja_verde.appendChild (img); and create the img tag inside the loop ...

function mostrarPersonajes(){
        var caja_verde = document.getElementById("listado");

        if(miRepositorio.getNumero()>=0){
                var codigo = "";
                for(var i=0; i<miRepositorio.getNumero(); i++){
                 var img = document.createElement("img");
                img.setAttribute("src", "../images/"+miRepositorio.getNombrePersonaje(i)+".png");
                var br = document.createElement("br");
                caja_verde.appendChild(br);
                caja_verde.appendChild(img);
                codigo += miRepositorio.getNombrePersonaje(i)+" ";
            }
            caja_verde.innerHTML = codigo;
        }
    }
    
answered by 08.06.2017 в 17:39