Muy buenas, de nuevo, estoy dandole vueltas al ajax, debido a que
estoy trabajando en un proyecto que ha de cumplir al menos con la
doble A.

Poquito a poquito voy haciendo cambios para que todo valide
correctamente, ahora mismo me encuentro con un problema, a ver si a
alguien se le ocurre algo desde lo que voy a explicar.

Estoy trabajando ahora mismo con el $ajax->link(). Bien... como
sabreis este helper nos creara un elemento <a>, con un evento onclick
en linea, lo cual no nos permitiría validar.

Mi solución es asignar el evento mediante javascript a todos los <a>
que tengan una clase determinada, para ello voy a la funcion link() de
ajax.php y hago las siguientes modificaciones:

===================================

        function link($title, $href = null, $options = array(), $confirm =
null, $escapeTitle = false) {
                if (!isset($href)) {
                        $href = $title;
                }

                if (!isset($options['url'])) {
                        $options['url'] = $href;
                }

//Lanzamos de nuevo el javascript por si tenemos links en el nuevo
dom.
                if (!isset($options['complete'])) {
                        $options['complete'] = '';
                }
                $options['complete'].="cargaeventos();";
//Esto es lo que me da problemas

                if (isset($confirm)) {
                        $options['confirm'] = $confirm;
                        unset($confirm);
                }
                $htmlOptions = $this->__getHtmlOptions($options);

                if (empty($options['fallback']) || 
!isset($options['fallback'])) {
                        $options['fallback'] = $href;
                }

                if (!isset($htmlOptions['id'])) {
                        $htmlOptions['id'] = 'link' . intval(rand());
                }

//      Eliminamos el evento onclick en linea.
//              if (!isset($htmlOptions['onclick'])) {
//                      $htmlOptions['onclick'] = '';
//              }
//              $htmlOptions['onclick'] .= ' return false;';

//      Añadimos la clase para eventos onclick
                if (isset($htmlOptions['class'])) {
                        $htmlOptions['class'].=" ";
                }
                else{
                        $htmlOptions['class'].="";
                }
                $htmlOptions['class'].="linkev";

                $return = $this->Html->link($title, $href, $htmlOptions, null,
$escapeTitle);
                $script = $this->Javascript->event("'{$htmlOptions['id']}'",
"click", $this->remoteFunction($options));

                if (is_string($script)) {
                        $return .= $script;
                }
                return $return;
        }
==================================

Bien como veis elimino el $htmlOptions['onclick'] .= ' return false;'
que daba el problema y añado al enlace la clase "linkev".

Luego en un js añado el evento a los enlaces que deben tenerlo:

==================================

function cargaeventos(){
                var anchors = $$('a.linkev');
                for (var i=0; i<anchors.length; i++){
                        var anchor = anchors[i];
                        anchor.onclick="return false;";
                        anchor.onkeypress="return false;";
        }
}
window.onload = cargaeventos;

===================================

Todo bien, una vez que calcamos sobre el link, funciona el ajax y no
lanza el href ya que le hemos añadido un "return false;"

El problema surje con los datos cargados en el DOM, si en ellos
tenemos también un $ajax->link() este método no funcionara. Pese a que
como podeis ver en el ajax.php añado un complete=cargareventos() el
script no funciona tal y como debería. He de suponer que el script
evalua solo los datos de la página original saltandose los datos
devueltos mediante AJAX (no se si estoy en lo cierto).

Bueno, espero haberme explicado mas o menos :(. Alguno pensará que es
un coñazo (a mi también me lo parece pero estoy forzado a hacerlo XD),
pero sería interesante conseguir poco a poco que esto mejorara. A ver
si alguno me puede dar una idea de como seguir. Saludos.


--~--~---------~--~----~------------~-------~--~----~
Has recibido este mensaje porque estás suscrito a Grupo "CakePHP-es" de Grupos 
de Google.
 Si quieres publicar en este grupo, envía un mensaje de correo 
electrónico a [email protected]
 Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED]
 Para obtener más opciones, visita este grupo en 
http://groups.google.com/group/CakePHP-es?hl=es.

-~----------~----~----~----~------~----~------~--~---

Responder a