2010-07-24 9 views
5

Wie Sie diese Arbeit mit jQuery.live erhalten?jQuery Tools Overlay & jQuery.live Ereignis

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

Ich habe versucht, dies ohne Erfolg:

$("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")); 
     } 
    }); 
}); 

Antwort

13

Sie müssen, es auf Konfiguration zu laden. Sie können das tun, indem Sie load: true dem Config-Objekt hinzufügen.

$("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 
    }); 
}); 

Hier sind the docs.

2

Das Overlay auf einem click ausgelöst wird, so müssen Sie die load option, wie diese verwenden:

$("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.

Das Overlay wird durch das Ereignis click geöffnet. Obwohl Sie das Overlay gebunden haben, wurde es nicht geöffnet, da das Ereignis, von dem es abhängt, bereits aufgetreten ist. Der Standardwert für load ist auch false, aber da Sie es nicht mögen, so schnell öffnen, wie es erstellt, setzen Sie sich auf true :)

+0

dies nicht funktioniert, tritt kein Pop-up – Rookian

+0

@Rookian: Versuchen Sie, die Antwort aktualisiert ... sieht aus wie das 'load' Verhalten geändert seit ich das letzte Mal geschaut habe, sollte die aktualisierte Antwort für dich funktionieren. –

+0

hm es funktioniert auch nicht, die Maske tritt kurz auf und dann wird die angeforderte Seite ohne das Overlay angezeigt. Es wird also nur das reine HTML angezeigt, als ob JavaScript deaktiviert wäre. – Rookian

2

Jetzt funktioniert es gut. Für alle diejenigen, die die gleichen Probleme wie ich hat hier ist der Code;)

<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>