2012-12-05 7 views
12

Ich baue eine kleine Landing-Page mit einem einfachen Demo-E-Mail-Anmeldeformular. Ich möchte, dass das Formularfeld bei der Fokussierung geöffnet wird und dann bei der Weichzeichnung wieder verkleinert wird.jQuery Stop .blur() Ereignis beim Klicken auf "Senden" button

Allerdings ist das Problem, das ich konfrontiert ist, wenn Sie auf den Absenden-Button klicken, dies führt zu der Unschärfe-Funktion, versteckt die Schaltfläche und schrumpft das Formular. Ich muss einen Weg finden, die .blur() Methode nur dann zu stoppen, wenn der Benutzer sich auf den Submit-Button konzentriert. Gibt es dafür eine gute Abhilfe?

Würde mich über jede Hilfe freuen, die ich bekommen kann!

Antwort

10

Es ist nicht die schönste Lösung, aber es funktioniert. Versuchen Sie folgendes:

$("#submitbtn").mousedown(function() { 
    mousedownHappened = true; 
}); 

$("#email").blur(function() { 
    if (mousedownHappened) // cancel the blur event 
    { 
     mousedownHappened = false; 
    } 
    else // blur event is okay 
    { 
     $("#email").animate({ 
      opacity: 0.75, 
      width: '-=240px' 
     }, 500, function() { 
     }); 

     // hide submit button 
     $("#submitbtn").fadeOut(400); 
    } 
});​ 

DEMO HERE

+1

Ja, es funktioniert! Vielen Dank für den kleinen Workaround. Das größte Problem war, wenn Sie auf die Schaltfläche "Senden" klicken, der Fade-Effekt und dann die Schaltfläche verschwindet. Aber mit diesem Beispiel können Sie unbegrenzt auf + halten klicken und der Fade-Effekt ist versteckt. nochmals vielen dank es ist sehr geschätzt! – Jake

+0

Sie sind herzlich willkommen :) –

1

Versuchen Sie, diese innerhalb .blur Handler:

if ($(':focus').is('#submitbtn')) { return false; } 
1

warum nicht verlassen sich auf submit Ereignis statt click? http://jsbin.com/ehujup/5/edit

nur paar Änderungen in den HTML-Code und js

Wrap-Eingänge in die form und required für E-Mail hinzufügen, wie es offensichtlich

<form id="form"> 
<div id="signup"> 
    <input type="email" name="email" id="email" placeholder="[email protected]" tabindex="1" required="required"> 
    <input type="submit" name="submit" id="submitbtn" value="Signup" class="submit-btn" tabindex="2"> 
</div> 
</form> 

in js vermuten, entfernen Sie Handler, der #submitbtn

hören
$("#submitbtn").on("click", function(e){ 
    e.stopImmediatePropagation(); 
    $("#signup").fadeOut(220); 
}); 

und verwenden Sie stattdessen Formular Listener

$("#form").on("submit", function(e){ 
    $("#signup").fadeOut(220); 
    return false; 
}); 

können Sie $.ajax() verwenden, um es noch besser zu machen.

Dadurch erhalten Sie einen Punkt in Bezug auf die Validierung und der HTML5-Validator des nativen Browsers wird das E-Mail-Format überprüfen, wo es unterstützt wird.

13

Ich weiß, dass diese Frage alt ist, aber der einfachste Weg wäre, event.relatedTarget zu überprüfen. Der erste Teil der if-Anweisung soll verhindern, dass ein Fehler ausgelöst wird, wenn relatedTarget null ist (der IF wird einen Kurzschluss verursachen, weil null gleichwertig ist und der Browser weiß, dass er die zweite Bedingung nicht prüfen muss, wenn die erste Bedingung falsch ist) in einer & & Aussage). So

:

if(event.relatedTarget && event.relatedTarget.type!="submit"){ 
    //do your animation 
} 
+0

Das ist ausgezeichnet, vielen Dank. Ich habe die Immobilie nie für verwandtesTarget genutzt. Ich werde definitiv etwas Zeit damit verbringen, darüber zu lesen. – Jake

+2

Schien sich wie eine große Annäherung, aber ich stieß auf ein Problem damit. Tabbing von der letzten Eingabe bis zum Senden-Button verhindert auch, dass der Blur-Handler ausgeführt wird, was nicht passieren soll. –

+0

@TimB hast du irgendeine Lösung für dieses Problem gefunden, ich stehe vor dem gleichen Problem – UmeRonaldo