2012-04-02 19 views
0

Ich möchte, dass, wenn der Benutzer aus dem # E-Mail-Formular div klickt, es ausgeblendet wird und #stamp wieder angezeigt wird. Ich versuche, dies mit einem Overlay Div zu tun, aber es funktioniert nicht ..jQuery klicken Sie auf OUT mit Overlay

  jQuery('#email-form').hide(); 

     jQuery('#stamp').click(function() { 
      jQuery(this).hide();  
      jQuery('#email-form').show(); 
      jQuery(

     }); 

     jQuery('.overlay').click(function() { 
       jQuery('#email-form').hide(); 
       jQuery('#stamp').show(); 
     }); 

-------------------------- -------- HTML ------------------------------

<div class="overlay" style="width:100%; height:100%;"></div> 
<div id="stamp"><img src="email_postmark.png"/></div> 
<div id="email-form"> 
    <form id="signup" action="<?=$_SERVER['PHP_SELF']; ?>" method="get"> 
     <span id="response"> 
    <?php require ('store-address.php'); if($_GET['submit']){ echo storeAddress(); } ?> 
    </span> 
    <input type="text" name="email" id="email" placeholder="TYPE EMAIL & PRESS ENTER"/> 
    </form> 
    </div> 
+1

Hier ist eine alternative Idee: Binden Sie einen Event-Handler an 'document.onclick' - stoppen Sie dann die Weiterleitung aller Klicks, die durch das # email-form blubbern. – Niko

Antwort

1

es so versuchen: http://jsfiddle.net/awEGq/1/

Die position:fixed stellt sicher, dass es immer den gesamten Hintergrund ausfüllt, auch wenn Sie Rollbalken haben. Wenn Sie position:absolute verwenden, können Sie an der Überlagerung vorbei blättern.

Wegen der display:fixed wird das Overlay über den Rest der Seite gelegt. Um das zu verhindern, habe ich es mit der z-index weiter hinten platziert.

Die background-color ist nur für die Show, um anzuzeigen, wo das Overlay ist. Sie können es in Ihrer Live-Implementierung entfernen.

+0

Aus irgendeinem Grund, wenn ich auf das Overlay klicke, um das Bild wiederherzustellen, funktioniert es nicht. – MG1

+0

In meiner Probe auch? Weil es hier funktioniert. –

+0

Entfernen des Z-Index hat es funktioniert .. – MG1

1

Wie in meinem Kommentar, hier ist ein anderer Ansatz:

var hideEmailForm = function() { 
    jQuery('#email-form').hide(); 
    jQuery('#stamp').show(); 
}; 

jQuery('#stamp').click(function(event) { 
    jQuery(this).hide();  
    jQuery('#email-form').show(); 

    event.stopPropagation(); // <-- NEW! 
    jQuery(document).one('click', hideEmailForm); 
}); 

jQuery('#email-form').click(function(event) { 
    event.stopPropagation(); 
}); 

Remember „hideEmailForm“ von document.onclick zu entbinden, wenn Sie # E-Mail-Formular versteckt sind!

jQuery('#email-form').unbind('click', hideEmailForm); 
+0

Das lädt die Seite mit den beiden Elementen und zeigt dann, wenn ich auf #stamp klicke, nur # email-form. – MG1

+0

Dies ist nur ein Ausschnitt, Sie müssen dies in Ihren vorhandenen Code integrieren. – Niko

+0

Ich realisiere das, aber es scheint, dass die Logik, wenn ein bisschen hier .. – MG1

Verwandte Themen