Foros del Web » Programando para Internet » Jquery »

Ayuda [plugin jquery para mostrar capas]

Estas en el tema de Ayuda [plugin jquery para mostrar capas] en el foro de Jquery en Foros del Web. Hola foreros!! mi problemas esta vez (espero que alguien me ayude) es este: estoy desarrollando un plug-in jquery para mi, el cual al pulsar un ...
  #1 (permalink)  
Antiguo 29/08/2010, 03:11
danneg
Invitado
 
Mensajes: n/a
Puntos:
Exclamación Ayuda [plugin jquery para mostrar capas]

Hola foreros!!

mi problemas esta vez (espero que alguien me ayude) es este:

estoy desarrollando un plug-in jquery para mi, el cual al pulsar un boton o enlace muestra una capa tipo widget el cual tendra una aplicacion dentro

el problema es que no ejecuta el codigo ademas de detener lo que esta escrito despues de llamar dicha funcion

la funcion deberia ser algo asi

Código Javascript:
Ver original
  1. $("#objeto").contextDialog("url de la aplicacion", "titulo", "aliniacion");

con ese codigo se supone que aparecera a un lado de el boton pulsado, pero no funciona, revise todo el codigo, y no encunetro mi error, por favor si pueden identificar cual es, me ayudaria mucho, igual cualquier sugerencia sobre optimizacion y cambio para mejorar!!

les dejo el codigo

Código Javascript:
Ver original
  1. function($) {
  2.     $.fn.contextDialog = function(title, urlContent, align){
  3.         return this.each(
  4.             $(this).click(function(e){
  5.                 $.fn.contextDialog._hide();
  6.                 this.append(
  7.                     '<div id="appSide">' +
  8.                         '<div id="appTitle">' + title + '</div>' +
  9.                         '<div id="appContent">' +
  10.                             '<iframe id="appFrame" src="' + urlContent + '" frameborder="0" framespacing="0" border="0"></iframe>' +
  11.                         '</div>' +
  12.                         '<div id="appOptins">Ver mas</div>' +
  13.                     '</div>'
  14.                 );
  15.                 var pos = this.offset();
  16.                 switch(align){
  17.                     case "right":
  18.                         $("#appSide").css({
  19.                             top: pos.top,
  20.                             left: pos.left + this.innerWidth()
  21.                         });
  22.                     break;
  23.                     case "left":
  24.                         $("#appSide").css({
  25.                             top: pos.top,
  26.                             left: pos.left - $("#appSide").innerWidth() - 5
  27.                         });
  28.                     break;
  29.                     default:
  30.                         $("#appSide").css({
  31.                             top: pos.top,
  32.                             left: pos.left + this.innerWidth()
  33.                         });
  34.                     break;
  35.                 }
  36.                 this.click( function(a) {
  37.                     $.fn.contextDialog._hide();
  38.                     a.preventDefault();
  39.                     this.click( function(o) {
  40.                         $.fn.contextDialog(urlContent, title, align);
  41.                         o.preventDefault();
  42.                     });
  43.                 });
  44.                 e.preventDefault();
  45.             });
  46.         );
  47.     };
  48.  
  49.     $.fn.contextDialog._hide = function() {
  50.             $("#appSide").remove();
  51.     };
  52. })(jQuery);

aa, una cosa mas, esto fue basado a un codigo que desarrolle solo para un boton, pero no me sirve solo usarlo con un boton, ese codigo funciona bien, pero repito no me sirve solo para un objeto, tambien les dejo el codigo que funciona

Código Javascript:
Ver original
  1. (function($) {
  2.  
  3.     $._context_dialog = {
  4.  
  5.     // Metodos de traducción, cambia el texto entre comillas
  6.     //por los de tu idioma o el idioma deseado.
  7.  
  8.         dialogClass: null,
  9.         showAll: 'Ver todas',
  10.  
  11.     //El cuerpo y estructura de la extención, NO. editar
  12.         // Public methods
  13.  
  14.         context_dialog: function(urlContent, title, align) {
  15.             if( title == null ) title = 'App';
  16.             $._context_dialog._show(title, urlContent, align)
  17.         },
  18.  
  19.         // Private methods
  20.  
  21.         _show: function(title, urlContent, align) {
  22.  
  23.             $._context_dialog._hide();
  24.  
  25.             $("#appButton").append(
  26.                 '<div id="appSide">' +
  27.                     '<div id="appTitle">' + title + '</div>' +
  28.                     '<div id="appContent">' +
  29.                         '<iframe id="appFrame" src="' + urlContent + '" frameborder="0" framespacing="0" border="0"></iframe>' +
  30.                     '</div>' +
  31.                     '<div id="appOptins">' + $._context_dialog.showAll + '</div>' +
  32.                 '</div>'
  33.             );
  34.  
  35.             var pos = $("#appButton").offset();
  36.             switch(align){
  37.                 case "right":
  38.                     $("#appSide").css({
  39.                         top: pos.top,
  40.                         left: pos.left + $("#appButton").innerWidth()
  41.                     });
  42.                 break;
  43.                 case "left":
  44.                     $("#appSide").css({
  45.                         top: pos.top,
  46.                         left: pos.left - $("#appSide").innerWidth() - 5
  47.                     });
  48.                 break;
  49.                 default:
  50.                     $("#appSide").css({
  51.                         top: pos.top,
  52.                         left: pos.left + $("#appButton").innerWidth()
  53.                     });
  54.                 break;
  55.             }
  56.             $("#appButtonA").click( function(e) {
  57.                 $._context_dialog._hide();
  58.                 e.preventDefault();
  59.                 $("#appButtonA").click( function(e) {
  60.                     $._context_dialog.context_dialog(urlContent, title, align)
  61.                 });
  62.             });
  63.         },
  64.  
  65.         _hide: function() {
  66.             $("#appSide").remove();
  67.         }
  68.  
  69.     },
  70.  
  71.     // Shortuct functions
  72.  
  73.     contextDialog = function(urlContent, title, align) {
  74.         $._context_dialog.context_dialog(urlContent, title, align);
  75.     }
  76.  
  77. })(jQuery);

y pueden ver el codigo en ejecucion aqui

el del primer codigo http://dannegm.com/senpaiUno
el del segundo codigo http://dannegm.com/senpaiDos

el boton que debe ejecutar es el que esta de gris obscuro titulado como notificaciones
  #2 (permalink)  
Antiguo 29/08/2010, 04:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Tema movido desde javascript
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 29/08/2010, 08:28
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años, 1 mes
Puntos: 66
Respuesta: Ayuda [plugin jquery para mostrar capas]

estuve probando y si me abren los cuadros al presionar el boton, bueno los dos primeros nada mas no se si los demas no los has programado todavia.
  #4 (permalink)  
Antiguo 29/08/2010, 11:02
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 9 meses
Puntos: 101
Respuesta: Ayuda [plugin jquery para mostrar capas]

A mi el dos me da este error en firebug:

Cita:
function($) {
ASí que probablemente no estés cargando la librería jquery.

El uno me da esto:
Cita:
syntax error
[Break on this error] function($) {\n
jquery...log2.js (línea 1)
$("#appButtonA").contextDialog is not a function
[Break on this error] $("#appButtonA").contextDialog("con...xample.html" , "Noticiones", "right");
  #5 (permalink)  
Antiguo 29/08/2010, 16:00
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda [plugin jquery para mostrar capas]

Cita:
Iniciado por tredio Ver Mensaje
estuve probando y si me abren los cuadros al presionar el boton, bueno los dos primeros nada mas no se si los demas no los has programado todavia.
jaja... bueno, puse dos enlaces, uno que funciona pero no es de mi agrado por la forma de utilizar y el otro que quisiera que se utilizara bien pero no sirve

el cuadro que puse color gris obscuro es que esta programado, el resto no, y el que se situa abajo funciona tal y como yo quiero, asi que ese por ahora ignorenlo (el msgDialog que muestra el chat de facebook)

por otra parte sobre

Código Javascript:
Ver original
  1. function($){
  2. })(jQuery);

creo que si ya lo note, pero lo probe y aun asi me detiene el script, supongo que la forma corregida seria

Código Javascript:
Ver original
  1. (function($){
  2. })(jQuery);

pero no me funciona, enseguida lo subire corregido para que noten los cambios

por otro lado me sale el mismo error que a ti (@mayid)

solo que lo probe con la consola de errores de webkit, y me muestra un error mas en lo que se supone que seria la implementacion

Cita:
Uncaught TypeError: Object #<an Object> has no method 'contextDialog' senpaiUno: line 30
no se que es lo que falla, me gustaria saberlo

por lo pronoto ya correji lo primero

Última edición por danneg; 29/08/2010 a las 16:04 Razón: me falto fragmento del codigo
  #6 (permalink)  
Antiguo 29/08/2010, 17:27
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda [plugin jquery para mostrar capas]

bueno, solucione una parte de mi problema, ya se muestra la capa a la hora de pulsar el boton, el problema ahora es que solo responde al primer elemtento que llama la funcion

tambien detecta un problema en el core de jquery donde menciona que "call" no es un metodo

lo que correji fue esto:

para implementarlo se usara

Código Javascript:
Ver original
  1. $(function() {
  2.     $("#appButtonA").contextDialog("contextDialog/example.html", "Notificaciones", "right");
  3. });

en lugar de

Código Javascript:
Ver original
  1. $("#appButtonB").contextDialog("contextDialog/example.html", "Mensajes", "right");

en la linia 45 del codigo borre un ";" despues de ")" de la declaracion del metodo click de $(this)

tambien cambie todos los this por $(this)

el codigo correjido es este

Código Javascript:
Ver original
  1. (function($) {
  2.     $.fn.contextDialog = function(urlContent, title, align){
  3.         return this.each(
  4.             $(this).click(function(e){
  5.                 $.fn.contextDialog._hide();
  6.                 $(this).append(
  7.                     '<div id="appSide">' +
  8.                         '<div id="appTitle">' + title + '</div>' +
  9.                         '<div id="appContent">' +
  10.                             '<iframe id="appFrame" src="' + urlContent + '" frameborder="0" framespacing="0" border="0"></iframe>' +
  11.                         '</div>' +
  12.                         '<div id="appOptins">Ver mas</div>' +
  13.                     '</div>'
  14.                 );
  15.                 var pos = $(this).offset();
  16.                 switch(align){
  17.                     case "right":
  18.                         $("#appSide").css({
  19.                             top: pos.top,
  20.                             left: pos.left + $(this).innerWidth()
  21.                         });
  22.                     break;
  23.                     case "left":
  24.                         $("#appSide").css({
  25.                             top: pos.top,
  26.                             left: pos.left - $("#appSide").innerWidth() - 5
  27.                         });
  28.                     break;
  29.                     default:
  30.                         $("#appSide").css({
  31.                             top: pos.top,
  32.                             left: pos.left + $(this).innerWidth()
  33.                         });
  34.                     break;
  35.                 }
  36.                 $(this).click( function(e) {
  37.                     $.fn.contextDialog._hide();
  38.                     e.preventDefault();
  39.             //      $(this).click( function(e) {
  40.             //          $.fn.contextDialog(urlContent, title, align);
  41.             //          e.preventDefault();
  42.             //      });
  43.                     $(function() {
  44.                         $(this).contextDialog(urlContent, title, align);
  45.                     });
  46.                 });
  47.                 e.preventDefault();
  48.             })
  49.         );
  50.     };
  51.  
  52.     $.fn.contextDialog._hide = function() {
  53.             $("#appSide").remove();
  54.     };
  55. })(jQuery);

y podra ser visto en funcionamiento en http://dannegm.com/senpaiUno

toda la primera fila de botones tiene la funcion para que se ejecute, pero solo se ejecuta el primero boton y no se como soolucionarlo, sugerencias por favor!!

y gracias!!
  #7 (permalink)  
Antiguo 29/08/2010, 23:21
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda [plugin jquery para mostrar capas]

Solucionado!!

antes de continuar gracias por su ayuda y los demas por leer este post

bueno, despues de tanto probar encontre la falla y ya esta solucionado

lo que hice fue quitar la funcion each(), que impedia ejecutar para cada elemento.

ahora el script funciona corecctamente, aun asi sigo aceptando sugerencias

para el que le interese aqui les dejo el codigo y un enlace de descarga

aviso: solo funciona con elementos que puedan tener foco (a, input, button, etc)

modo de uso:
en head
Código Javascript:
Ver original
  1. <link type="text/css" rel="stylesheet" href="contextDialog/contextDialog.css" />
  2.         <script type="text/javascript" src="includes/jquery.min.js">
  3.     </script>
  4.     <script type="text/javascript" src="contextDialog/jquery.contextDialog.js">
  5.     </script>
  6.     <script type="text/javascript">
  7.         $(function() {
  8.             $("#appButton").contextDialog("contextDialog/example.html", "Notificaciones", "right");
  9.         });
  10.     </script>

el codigo:
Código Javascript:
Ver original
  1. (function($) {
  2.     $.fn.contextDialog = function(urlContent, title, align){
  3.             $(this).click(function(e){
  4.                 $("#appSide").remove();
  5.                 $("body").append(
  6.                     '<div id="appSide"><div id="appPanel">' +
  7.                         '<div id="appTitle">' + title + '</div>' +
  8.                         '<div id="appContent">' +
  9.                             '<iframe id="appFrame" src="' + urlContent + '" frameborder="0" framespacing="0" border="0"></iframe>' +
  10.                         '</div>' +
  11.                         '<div id="appOptins">Ver mas</div>' +
  12.                     '</div></div>'
  13.                 );
  14.                 var pos = $(this).offset();
  15.                 switch(align){
  16.                     case "right":
  17.                         $("#appSide").css({
  18.                             top: pos.top - 5,
  19.                             left: pos.left + $(this).innerWidth()
  20.                         });
  21.                     break;
  22.                     case "left":
  23.                         $("#appSide").css({
  24.                             top: pos.top,
  25.                             left: pos.left - $("#appSide").innerWidth() - 5
  26.                         });
  27.                     break;
  28.                     default:
  29.                         $("#appSide").css({
  30.                             top: pos.top - 5,
  31.                             left: pos.left + $(this).innerWidth()
  32.                         });
  33.                     break;
  34.                 }
  35.                 $(this).focus();
  36.                 $(this).blur(function() {
  37.                     $("#appSide").remove();
  38.                 });
  39.             });
  40.     };
  41. })(jQuery);

y el enlace a la descarga http://dannegm.com/contextDialog.rar

y puede ser visto funcionando aqui http://dannegm.com/senpai

de nuevo gracias por su ayuda!!

Última edición por danneg; 30/08/2010 a las 01:37

Etiquetas: capas, plugin
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 13:11.