Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: TorKilah en 18 Diciembre 2012, 22:20 pm



Título: javascript no se carga en capa dinámica. Por qué?
Publicado por: TorKilah en 18 Diciembre 2012, 22:20 pm
Buenas!! Bueno, antes que nada, gracias por vuestro tiempo y, antes de preguntar aquí he googleado mucho. Solo que yo no soy programador, estoy aprendiendo por mi cuenta, y sobre lo que de momento he encontrado, hablan demasiado técnicamente para mis niveles. Jejeje, ahora, al lío:

Parte A - La cuestión es que tengo un index.php, y en esa página tengo una función con Ajax, que llama a otra página php (registro.php) dentro de una capa css (.contenedor) haciendo click a un botón (funciona)

Parte B - En el formulario de registro aplico un script para falidar el e-mail tal que así: (también funciona sin problemas. PERO SOLO EJECUTANDOLO EN REGISTRO.PHP)
Código
  1. <script type="text/javascript">
  2.  var f20 = new LiveValidation('#f20');
  3.         f20.validate( Validate.Email );
  4. </script>
  5.  

Parte C y problema en cuestión... Cuando en el index.php le doy click al botón, se carga dinámicamente el formulario de registro.php en el div.contenedor, peeeero... no funciona el script que valida el e-mail...:

He pensado que lo más probable es que sea alguna incompatibilidad... como que el script que se carga en registro.php se esté pegando con otro que haya en index.php pero no sabría por donde buscar... :S, tengo la última libreria jQuery-1.8.2

He probado también de cargar la librería del script del validador en el index... no se por que... supongo que por barajar posibilidades, ya os he dicho que no tengo ni papa... voy haciendo chino chano, hehe.

Este es el script que utilizo en el index.php para que se cargue registro.php dinámicamente.

Código
  1. <script type="text/javascript">
  2. var obj;
  3.  
  4. function generaPeticion(url) {
  5. if (window.XMLHttpRequest) {
  6.    // Obtener un nuevo objeto
  7.    obj = new XMLHttpRequest();
  8.    // Indicar la funcion de retorno
  9.    obj.onreadystatechange = procesaRespuesta;
  10.    // Método  GET con la url; "true" para asincronica
  11.    obj.open("GET", url, true);
  12.    // null for GET with native object
  13.    obj.send(null);
  14.  // IE/Windows ActiveX object
  15.  
  16.  } else if (window.ActiveXObject) {
  17.    obj = new ActiveXObject("Microsoft.XMLHTTP");
  18.    if (obj) {
  19.      obj.onreadystatechange = procesaRespuesta;
  20.      obj.open("GET", url, true);
  21.      obj.send();
  22.    }
  23.  } else {
  24.    alert("Su navegador no soporta AJAX");
  25.  }
  26. }
  27.  
  28. function procesaRespuesta() {
  29.  
  30.    if (obj.readyState == 4) {
  31.          document.getElementById('registros').innerHTML = obj.responseText;
  32.    }
  33. }
  34. </script>
  35.  

Si falta algún dato decidme por favor!! creo haber expuesto lo necesario!!


Título: Re: javascript no se carga en capa dinámica. Por qué?
Publicado por: TorKilah en 20 Diciembre 2012, 20:29 pm
Al final lo solucioné de otra manera.

Para el que se vea en mi situación, por lo menos ya tiene una forma preventiva de salir del apuro, hehehe.

Buscando, buscando, buscando y buscando, he ido leyendo cosas sobre la función .live() y que está desfasada, que no es muy recomendable y tal... entonces pensé... en la página b.php funciona bien el script, cuando cargo la página b.php en la a.php no se carga el script... omg...

Como lo podría hacer? pues bien, deduje que podría haber alguna manera de llamar a un script dinámicamente haciendo algún evento sobre algún objeto... y efectivamente, buscando más encontré la manera de hacer esto:

Siendo #registros la capa .css donde quiero cargar el formulario de la página b.php

Código
  1.  $('#registros').click(function ()
  2.      {
  3.        $.getScript("js/livval.js", function (data, estado)
  4.      {
  5.           if (estado == 'success')
  6.           {
  7.              var f20 = new LiveValidation('f20');
  8.              f20.add( Validate.Email );
  9.           }
  10.           else
  11.       {
  12.          alert("Error. Inténtalo de nuevo");
  13.           }
  14.      });
  15.      });
  16.  

Que os parece?? creéis que habría alguna forma mejor de ejecutar este concepto? (seguro que la hay)