2012-12-05 18 views
12

Basit bir demo e-posta kayıt formuyla küçük bir açılış sayfası yapıyorum. Odak alanı açıldığında form alanının açılmasını ve daha sonra bulanıklaştırmak için geri çekilmesini istiyorum.jQuery "Gönder" düğmesini tıklattığınızda .blur() olayı

Ancak, karşı karşıya olduğum sorun, gönderme düğmesini tıkladığınızda bu, bulanıklık işlevini tetikleyerek düğmeyi gizleyerek ve formu daraltmaktır. Kullanıcı sadece gönderme düğmesine odaklanmak için tıkladığında .blur() yöntemini durdurmanın bir yolunu bulmalıyım. Bunun için iyi bir çözüm var mı?

Alabildiğim herhangi bir yardımı takdir ediyorum!

cevap

10

Bu en güzel çözüm değil, işe yarıyor. Bu deneyin:

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

Evet önemli! Teşekkürler bir demet küçük bir çözüm için teşekkür ederiz. En büyük sorun, gönder düğmesine basıp + tıkladığınızda, solma etkisi olur ve ardından düğme kaybolur. Fakat bu örnekle süresiz + tuşunu basılı tutabilirsiniz ve solma etkisi ortadan kalkar. tekrar teşekkürler içtenlikle çok takdir! – Jake

+0

Rica ederim :) –

1

.blur işleyicisi içinde bu deneyin:

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

neden submit olay yerine click güvenmeyin? http://jsbin.com/ehujup/5/edit

sadece birkaç html içine değişiklikler ve js

sarma girişlerine form içine ve belli ki, js

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

varsayalım #submitbtn

dinlemek işleyicisi kaldırmak olarak e-posta için required eklemek
$("#submitbtn").on("click", function(e){ 
    e.stopImmediatePropagation(); 
    $("#signup").fadeOut(220); 
}); 

ve bunun yerine kullan başvuru formu listererDaha da iyi hale getirmek için $.ajax() numaralı telefonu kullanabilirsiniz.

Bunu yaptığınızda doğrulama açısından puan kazanırsınız ve yerel tarayıcı HTML5 doğrulayıcı, desteklendiği yerde e-posta biçimini denetler.

13

Bu sorunun eski olduğunu biliyorum, ancak bunu yapmanın en kolay yolu event.relatedTarget adresini kontrol etmek olacaktır. If ifadesinin ilk kısmı, relatedTarget boşsa bir hata atmaktan kaçınmaktır (IF kısa devre, null, false değerine eşdeğerdir ve tarayıcı, ilk koşul yanlışsa ikinci koşulu kontrol etmek zorunda olmadığını bilir) bir & & bildirimi).

Yani:

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

Bu mükemmel çok teşekkür ederim. RelatedTarget için mülkünü hiç kullanmadım. Kesinlikle okumaya biraz zaman harcayacağım. – Jake

+2

Harika bir yaklaşım gibi görünüyordu ama bununla bir problem yaşadım. Son girdiden gönderme düğmesine basmak da bulanıklık işleyicisinin çalışmasını engellemekte, olmasını istemiyorum. –

+0

@TimB bu sorun için herhangi bir çözüm buldunuz mu, aynı sorunla karşı karşıyayım – UmeRonaldo

İlgili konular