2010-09-24 21 views
14

Estoy usando Colorbox para mostrar el contenido html de divs ocultos en mi página. Puedo conseguir que esto funcione a la perfección con lo siguiente:¿Cómo uso colorbox para mostrar divs ocultos en mi página sin hardcoding?

$("a.colorbox").colorbox({width:"600px", inline:true, href:"#344"}); 

Esto mostrará el div con el ID de 344.

Sin embargo, debido a que estoy tratando de construir una página escalable y dinámica con WordPress, Quiero poder obtener la ID de mis divs a través de una función, en lugar de codificarlos en la llamada jquery.

he modificado el ejemplo de Jack Moore:

$("a[rel='example']").colorbox({title: function(){ 
    var url = $(this).attr('href'); 
    return '<a href="'+url+'" target="_blank">Open In New Window</a>'; 
}}); 

para que se vea así:

$(".colorbox").colorbox({width:"600px", inline:true, href:function(){ 
    var elementID = $(this).attr('id'); 
    return elementID; 
}}); 

El problema con esto es que la propiedad href de la función colorbox está buscando una cadena con una marca # delante de la ID. Intenté varias formas de concatenar el # al frente de la función, incluido el # en el valor de retorno, y concatenar el # a la variable elementID. Sin suerte.

También he intentado usar la sintaxis en el ejemplo de Jack (sin suerte) para que mi instrucción de retorno era la siguiente:

return "#'+elementID+'"; 

Creo que mi pregunta básica es: ¿Cómo uso colorbox para mostrar divs ocultos en mi página sin hardcoding todo?

Gracias por su ayuda, Jiert

+3

Mi El primer pensamiento es que '' return '' '' + elementID + '"' no devolvería una cadena? Quizás 'return '#" + elementID; 'estaría más cerca. –

Respuesta

4
return "#" + elementID; 

tendrán el efecto deseado, como dice David.

+2

Eche un vistazo a: http://stackoverflow.com/editing-help para obtener consejos sobre cómo formatear sus respuestas, para que el código * se vea * como código, por ejemplo. +1, por cierto (en un acto desvergonzado de auto-celebración ...) =) –

+0

Impresionante, gracias amigos! Eso sí que funciona Lo agradezco: D – Jiert

+1

¿Puede compartir su css/html que fue con jQuery? Tengo un problema similar ... ¿cómo se veía? – Ash

6

Estoy enfrentando el mismo problema. ¿Cómo es tu html? significado, ¿cómo estructurar sus "divs"

mina se parece a esto: Javascript:

<script> 
    $(document).ready(function() { 
    $("a.colorbox").colorbox({ width: "50%", inline: true, href: function() { 
      var elementID = $(this).attr('id'); 
      return "#" + elementID; 
     } 
     }); 
    }); 
</script> 

Y el HTML se parece a (He intentado cambiar el display: none):

<a class='colorbox' href="#">Inline HTML</a> 
    <div style="display:none"> 
     <div id="pop"> 
      This data is to be displayed in colorbox 
     </div> 
    </div> 
+0

Debe establecer el href de su enlace .colorbox como #pop como: –

+3

Inline HTML 
This data is to be displayed in colorbox

7

Realmente no me gustó ninguna de las respuestas dadas anteriormente. Así es como lo hice (similar pero no exactamente igual). también les comentaba plenamente a las personas un poco nuevo Javascript y el enchufe colorbox en

$(document).ready(function() { //waits until the DOM has finished loading 
    if ($('a.lightboxTrigger').length){ //checks to see if there is a lightbox trigger on the page 
     $('a.lightboxTrigger').each(function(){ //for every lightbox trigger on the page... 
      var url = $(this).attr("href"); // sets the link url as the target div of the lightbox 
      $(url).hide(); //hides the lightbox content div 
      $(this).colorbox({ 
       inline:true, // so it knows that it's looking for an internal href 
       href:url, // tells it which content to show 
       width:"70%", 
       onOpen:function(){ //triggers a callback when the lightbox opens 
        $(url).show(); //when the lightbox opens, show the content div 
       }, 
       onCleanup:function(){ 
        $(url).hide(); //hides the content div when the lightbox closes 
       } 
      }).attr("href","javascript:void(0)"); //swaps the href out with a javascript:void(0) after it's saved the href to the url variable to stop the browser doing anything with the link other than launching the lightbox when clicked 
       //you could also use "return false" for the same effect but I proffered that way 
     }) 
    } 
}); 

y este es el html:.

<a class="lightboxTrigger" href="#lightboxContent">Lightbox trigger</a> 
<div id="lightboxContent" class="lightboxContent"> <!-- the class is just to make it easier to style with css if you have multiple lightboxes on the same page --> 
    <p>Lightbox content goes here</p> 
</div> 

Creo que sería trabajar con múltiples cajas luminosas, por una página pero no lo he probado con eso.

+2

¡Fue muy útil que haya documentado la opción 'en línea'! Añadiría que si pones tu objetivo dentro de un div oculto puedes renunciar a los pasos onOpen y onCleanup que se muestran aquí. – schwabsauce

+0

Buen punto. :) Escribí esto cuando todavía era un poco inexperto. –

1

Esta es la manera que tengo para trabajar

HTML: (tomado del ejemplo, en una de las respuestas)

<a class="lightboxTrigger" href="#lightboxContent">Lightbox trigger</a> 
<div id="lightboxContent" class="lightboxContent"> <!-- the class is just to make it easier to style with css if you have multiple lightboxes on the same page --> 
    <p>Lightbox content goes here</p> 
</div> 

Javascript:

$('a.lightboxTrigger').click(function(){ 
    var ref = $(this).attr("href"); 
    $.colorbox({ html: $(ref).html() }); 
    $.colorbox.resize(); 
}); 
Cuestiones relacionadas