Comunidad de diseño web y desarrollo en internet online

Matar función con jQuery

Citar            
MensajeEscrito el 09 Mar 2013 10:52 pm
Saludos gente superdotada, tengo un nuevo problema:

Resulta que me he creado una ventana modal que se ejecuta cada que se le da clic a una etiqueta <a> con cierta clase. Ejemplo:

Código Javascript :

$(document).on("ready", iniciar);
function iniciar()
{
    $("a.ventana-modal").on("click",abrir);
}

function abrir()
{
// Se abre la ventana
}


Pero estoy usando ajax para cagar el sitio, la primera vez que carga todo funciona bien. El problema inicia cuando cargo más contenido en el que existe etiquetas de este tipo (a.ventana-modal), al hacer clic en ellas la función abrir() no se ejecuta (en versiones anteriores de jQuery esto no me pasaba). Por lo que debo volver a ejecutar la función iniciar() en el documento y eso hace que ahora si se ejecute.

Pero cuando hago clic en las etiquetas que ya existían la primera vez el contenido (de la ventana modal) se carga 2 veces!

Imagino que es porque la función se manda llamar 2 veces (al inicio y cuando cargo nuevo contenido).

Quisiera saber si existe alguna forma de que la función "iniciar" tome en cuenta el contenido que se va cargando por ajax y así solo llamarla una vez (al inicio).

O saber cómo matar la función que ya se está ejecutando y que solo se ejecute la nueva.

Creo que cualquiera de las dos repuestas solucionarían mi problema.

Espero me puedan ayudar, y si no es así agradezco el tiempo que se tomaron en leer el post.

Saludos y quedo a espera de sus sugerencias.. =)

Por Kompanhero

21 de clabLevel



Genero:Masculino  

Inocente hasta probar lo contrario.

chrome
Citar            
MensajeEscrito el 10 Mar 2013 12:12 pm
Crea una variable boleana que te indique si la ventana esta abierta o cerrada, y si está abierta le das un return a la acción de abrir

Código Javascript :

$(document).on("ready", iniciar);

function iniciar() {
    $("a.ventana-modal").on("click",abrir);
}

var abierto = false;

function abrir() {
    //Si la ventana ya está abierta sales de la función
    if (abierto) return;

     //código para abrir la ventana
     abierto = true;
}

function cerrar () {
    //Código que cierra la ventana
    abierto = false;
}

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 11 Mar 2013 10:29 pm
Hey Abducted eres un genio!

Yo había pensado remplazar el contenido usando (en lugar de solo añadirlo):

Código Javascript :

$('contenedor').html(contenido);

Pero aunque funcionaría no sería bueno para la optimización del sistema.

Es claro que tu idea es mejor, gracias por compartirla.

Saludos.. =)

Por Kompanhero

21 de clabLevel



Genero:Masculino  

Inocente hasta probar lo contrario.

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.