Foros del Web » Programando para Internet » Javascript »

Como llamar correctamente a una funcion jquery desde Javascript

Estas en el tema de Como llamar correctamente a una funcion jquery desde Javascript en el foro de Javascript en Foros del Web. Saludos a tod@s Le he puesto este titulo a la pregunta porque creo que ahí está el problema, pero no estoy seguro. Tengo una galería ...
  #1 (permalink)  
Antiguo 12/10/2015, 13:14
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 4 meses
Puntos: 2
Como llamar correctamente a una funcion jquery desde Javascript

Saludos a tod@s
Le he puesto este titulo a la pregunta porque creo que ahí está el problema, pero no estoy seguro.
Tengo una galería de imágenes y unos enlaces que pinchando sobre ellos me muestra la foto correspondiente, tanto las imágenes como los enlaces están en un array y quiero que al pinchar sobre un enlace, se ejecute una función que además de cambiarme la foto, hasta aquí todo bien, remarque este enlace y desmarque el que estuviera remarcado, esto último lo hago con jQuery, pues el problema es que tengo que pinchar una segunda vez sobre cualquier enlace para que me lo haga, me explico, me carga la página, pincho sobre un enlace y me cambia la foto pero no me remarca el enlace, vuelvo a pinchar y ahora si me lo remarca y ya me funciona perfectamente hasta que cargo la página de nuevo, que me vuelve a hacer lo mismo y no tengo ni idea de porqué ocurre esto
Código Javascript:
Ver original
  1. function cambiarImgGr(imagen, title) {
  2.  
  3.   var imagenGr= document.getElementById('imgGr')
  4.   imagenGr.src = "" + imagen +"";
  5.  
  6.   var elemento = document.getElementById('titulo');
  7.   elemento.innerHTML = title;
  8.  
  9. //código jQuery que pone activo el enlace sobre el que pinchamos y borra el que estaba
  10. $(document).ready(function(){
  11.    
  12.     $("a.galeria").click(function(galeria){
  13.        
  14.         $("a.galeria").removeClass("active");
  15.         $(this).addClass("active")     
  16.     });
  17. });
  18.  
  19. //Con esta función al cargar la página me debería aparecer activo el primer elemento, el que tiene índice [0], pero tampoco  me lo hace, son las dos cosas que me están fallando.
  20.  
  21.  function pedro(){
  22.     if (datos[i]== 0)
  23.     activo = "active galeria";
  24.     else
  25.     activo = "galeria";
  26.     return activo
  27.  }
  28.                         imgId = datos[i][2];
  29.             imagen = "imagesGaleArte/" + imgId + ".jpg";
  30.             title = datos[i][1];                               
  31.             enlaces = datos[i][0];
  32.  
  33. Contenido += '<li><a class="'+pedro()+'" href=\"javascript:cambiarImgGr(\'' + imagen + '\',\'' + title + '\')"/>'+enlaces+'</a></li>';
  #2 (permalink)  
Antiguo 15/10/2015, 09:01
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Como llamar correctamente a una funcion jquery desde Javascript

Se podría cambiar la línea 33 usando atributos data en vez llamar a la función js desde el href, así:

Contenido += '<li><a class="'+pedro()+'" href="#" data-imagen="' + imagen + '" data-title="' + title + '" />'+enlaces+'</a></li>';

Luego mover la llamada a cambiarImgGr en la línea 10 así:

$("a.galeria").click(function(e){
e.preventDefault();

$("a.galeria").removeClass("active");
$(this).addClass("active")

var imagen = this.getAttribute('data-imagen'); //o con Jquery sería var imagen = $(this).data('imagen');
var title = this.getAttribute('data-title'); //o con Jquery sería var title = $(this).data('title');

cambiarImgGr(imagen, title);
});

Saludos!
  #3 (permalink)  
Antiguo 15/10/2015, 17:08
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 4 meses
Puntos: 2
Respuesta: Como llamar correctamente a una funcion jquery desde Javascript

La función cambiarImgGr() entonces quedaría de esta manera

Código Javascript:
Ver original
  1. function cambiarImgGr(imagen, title) {
  2.  
  3.   var imagenGr= document.getElementById('imgGr')
  4.   imagenGr.src = "" + imagen +"";
  5.  
  6.   var elemento = document.getElementById('titulo');
  7.   elemento.innerHTML = title;
  8.  
  9. }

Y fuera de la función vendría el jQuery con la llamada a la función cambiarImgGr()

Código Javascript:
Ver original
  1. $("a.galeria").click(function(e){
  2.          e.preventDefault();
  3.  
  4.      $("a.galeria").removeClass("active");
  5.      $(this).addClass("active")
  6.  
  7.      var imagen = this.getAttribute('data-imagen'); //o con Jquery sería var imagen = $(this).data('imagen');
  8.      var title = this.getAttribute('data-title'); //o con Jquery sería var title = $(this).data('title');
  9.  
  10.      cambiarImgGr(imagen, title);
  11.  });
Pues si esto es correcto y lo he hecho todo bien, no funciona, al pinchar en cualquier enlace NO se pone active y la página se va al principio, he quitado de la clase la función pedro y he puesto directamente "galería" y tampoco va
  #4 (permalink)  
Antiguo 15/10/2015, 21:48
Avatar de siddartha23  
Fecha de Ingreso: septiembre-2013
Mensajes: 357
Antigüedad: 10 años, 7 meses
Puntos: 39
Respuesta: Como llamar correctamente a una funcion jquery desde Javascript

La función cambiarImgGr() se puede simplificar bastante con Jquery y en el evento click de a.galeria te falta un punto y coma en la línea 5. Acostúmbrate a usar la consola, seguro que te está marcando algún error....
__________________
velarde23.com - Soluciones Web
  #5 (permalink)  
Antiguo 16/10/2015, 01:14
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 4 meses
Puntos: 2
Respuesta: Como llamar correctamente a una funcion jquery desde Javascript

La falta del ; no me daba error en la consola pero ya se lo he puesto y sigue igual, no hace nada, lo del atributo getAttribute no lo entiendo muy bien, porque el title no sale del atributo de la imagen, sino de un elemento del array, es otro elemento más.
Con el código inicial, tanto del jQuery como de la función cambiarImgGr(imagen, title) si funcionaba perfectamente, pero la primera vez tenia que pulsar dos veces, para que me hiciera caso
  #6 (permalink)  
Antiguo 16/10/2015, 08:11
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Como llamar correctamente a una funcion jquery desde Javascript

con getAttribute puedes acceder al valor de cualquier propiedad de un elemento html, incluso puedes crear tus propios atributos personalizados, por ej:

html:
Cita:
<input mi_atributo="hola" id="mi_id"/>
js:
Cita:
var valor = document.getElementById('mi_id').getAttribute('mi_atributo');
console.log(valor); // "hola"
lo habitual es crear esos atributos nuevos con el prefijo data-tu_atributo, tal vez sería conveniente que pusieses "todo" tu código para ver exactamente por que tiene ese comportamiento.

Saludos!
  #7 (permalink)  
Antiguo 16/10/2015, 12:15
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 4 meses
Puntos: 2
Respuesta: Como llamar correctamente a una funcion jquery desde Javascript

Los datos salen de un array, con tres elementos, nº de orden, que se convierte en el texto del enlace sobre el que pinchas,
en este caso son numeros, el siguiente elemento que sería la descripción de la imagen, que sería el title aunque aquí no lo
utilizo como tal y el último elemento, que es el nombre de la imagen
Código Javascript:
Ver original
  1. var datos = new Array();
  2. datos = [
  3. ["1","pajaros","mirlo"],
  4. ["2","paisajes","sabana"],
Entonces no sería más fácil utilizar la función original añadirle index por ejemplo para que al pinchar sobre un enlace saber el indice de ese enlace
y a traves de la otra funcion cambiarImgGr() y utilizando document.getElementById('divRecorrer').className = "active"; poner activo el enlace
sobre el que se ha pinchado, tal como está está ahora la funcion, al pinchar sobre cualquier enlace me pone activo siempre el enlace [0] falta ponerle un this,
para que lo haga sobre si mismo
Código Javascript:
Ver original
  1. index = datos[i];
  2.  
  3. Contenido += '<li><a id="divRecorrer" class="galeria" href=\"javascript:cambiarImgGr(\'' + imagen + '\',\'' + title + '\',\'' + index + '\')"/>'+enlaces+'</a></li>';
  4.  
  5.  
  6. function cambiarImgGr(imagen, title, index) {
  7.  
  8.   var imagenGr= document.getElementById('imgGr')
  9.   imagenGr.src = "" + imagen +"";
  10.  
  11.   var elemento = document.getElementById('titulo');
  12.   elemento.innerHTML = title;
  13.  
  14. //Y aquí utilizar el parámetro index, que nos da el Nº de índice y el this para que lo haga sobre el enlace que pinchamos y no sobre el [0]
  15.   document.getElementById('divRecorrer').className = "active";
  16.  
  17. }

Etiquetas: correctamente, funcion, html, jquery
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:58.