2010-07-24 7 views
5

¿Cómo funciona esto con jQuery.live?Superposición de jQuery Tools y evento jQuery.live

$("a[rel]").overlay({ 
    mask: '#3B5872', 
    effect: 'apple', 
    api: true, 
    onBeforeLoad: function() { 
     var wrap = this.getOverlay().find(".contentWrap"); 
     wrap.load(this.getTrigger().attr("href")); 
    } 
}); 

yo probamos este sin éxito:

$("a[rel]").live('click', function() { 
    alert('live'); 
    $(this).overlay({ 
     mask: '#3B5872', 
     effect: 'apple', 
     api: true, 
     onBeforeLoad: function() { 
      var wrap = this.getOverlay().find(".contentWrap"); 
      wrap.load(this.getTrigger().attr("href")); 
     } 
    }); 
}); 

Respuesta

13

Es necesario configurar para cargar la configuración. Puede hacerlo agregando load: true al objeto config.

$("a[rel]").live('click', function (e) { 
    e.preventDefault(); //prevent default link action 

    $(this).overlay({ 
     mask: '#3B5872', 
     effect: 'apple', 
     api: true, 
     onBeforeLoad: function() { 
      var wrap = this.getOverlay().find(".contentWrap"); 
      wrap.load(this.getTrigger().attr("href")); 
     }, 
     load: true 
    }); 
}); 

Éstos son the docs.

2

La superposición se desencadena en un click, por lo que es necesario utilizar el load option, así:

$("a[rel]").live('click', function (e) { 
    $(this).overlay({ 
     mask: '#3B5872', 
     effect: 'apple', 
     api: true, 
     load: true, 
     onBeforeLoad: function() { 
      var wrap = this.getOverlay().find(".contentWrap"); 
      wrap.load(this.getTrigger().attr("href")); 
     } 
    }); 
    e.preventDefault(); 
});​ 

You can give it a try here.

La superposición se abre por el evento click, por lo que aunque estaba vinculando la superposición, no se abría porque el evento del que dependía ya se había producido. El valor predeterminado para load es también false, pero ya que no desea que se abra tan pronto como se la crea, la puso a true :)

+0

esto no funciona, no se produce emergente – Rookian

+0

@Rookian: Pruebe la respuesta actualizada ... parece que el comportamiento 'load' cambiado desde la última vez que miré, la respuesta actualizada debería funcionar para usted. –

+0

hm no funciona demasiado, la máscara se produce durante poco tiempo y luego la página solicitada se muestra sin la superposición. Por lo tanto, solo se muestra el html puro como si javascript estuviera deshabilitado. – Rookian

2

Ahora funciona bien. Para todos aquellos que tiene el mismo problema como yo aquí está el código;)

<script type="text/javascript"> 
    // safe the overlay element in a global variable 
    var overlayElem; 

    $(document).ready(function() { 
     // register the click event for ajax load and page load 
     $("a[rel]").live('click', function (e) { 
      e.preventDefault(); 

      // save overlay 
      overlayElem = $(this); 

      // load overlay 
      $(this).overlay({ 
       mask: '#3B5872', 
       effect: 'apple', 
       api: true, 
       load: true, 
       onBeforeLoad: function() { 
        var wrap = this.getOverlay().find(".contentWrap"); 
        wrap.load(this.getTrigger().attr("href")); 
       } 
      }); 
     }); 
    }); 

    // send form data via ajax 
    function ajaxFormRequest(form, callback, format) { 
     $.ajax({ 
      url: form.action, 
      type: form.method, 
      dataType: format, 
      data: $(form).serialize(), 
      success: callback 
     }); 
    } 
    // close the overlay and update the table 
    function update_grid(result) { 
     overlayElem.overlay().close(); 
     $("#gridcontainer").html(result); 
    } 

</script>