2012-12-05 56 views
12

मैं एक साधारण डेमो ई-मेल साइनअप फॉर्म के साथ एक छोटा लैंडिंग पृष्ठ बना रहा हूं। ध्यान केंद्रित करते समय मैं फॉर्म फ़ील्ड खोलना चाहता हूं, और उसके बाद धुंध पर वापस हटना चाहता हूं।jQuery रोकें .blur() घटना "सबमिट" बटन पर क्लिक करते समय

हालांकि जब आप सबमिट बटन पर क्लिक करते हैं तो यह समस्या है जब यह सबमिट बटन पर क्लिक करता है, यह ब्लर फ़ंक्शन को उत्तेजित करता है, बटन को छुपाता है और फ़ॉर्म को कम करता है। मुझे .blur() विधि को रोकने के लिए एक तरीका खोजने की आवश्यकता है जब उपयोगकर्ता सबमिट बटन पर फ़ोकस करने के लिए क्लिक कर रहा हो। क्या इसके लिए कोई अच्छा कामकाज है?

मुझे प्राप्त होने वाली किसी भी मदद की सराहना करेंगे!

उत्तर

10

यह सबसे सुंदर समाधान नहीं है, लेकिन यह काम करता है। इस प्रयास करें:

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

हाँ यह करता है! धन्यवाद एक गुच्छा मैं छोटे कामकाज की सराहना करता हूं। सबसे बड़ी समस्या तब होती थी जब आप सबमिट बटन पर + होल्ड पर क्लिक करते हैं, फीका प्रभाव होता है और फिर बटन गायब हो जाता है। लेकिन इस उदाहरण के साथ आप अनिश्चित काल तक + पर क्लिक कर सकते हैं और फीका प्रभाव दूर हो गया है। फिर से ईमानदारी से धन्यवाद, यह बहुत सराहना की है! – Jake

+0

आपका स्वागत है :) –

1

.blur हैंडलर के अंदर इस प्रयास करें:

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

क्यों submit बजाय घटना click पर भरोसा नहीं? http://jsbin.com/ehujup/5/edit

form में html में सिर्फ जोड़ी परिवर्तन और जे एस

चादर इनपुट और ईमेल के लिए required जोड़ने के रूप में यह स्पष्ट रूप से,

<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> 
js में

होने के लिए लगता है कि हैंडलर जो #submitbtn

सुनने को दूर
$("#submitbtn").on("click", function(e){ 
    e.stopImmediatePropagation(); 
    $("#signup").fadeOut(220); 
}); 

और इसके बजाय फॉर्म listerer सबमिट करें

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

आप इसे बेहतर बनाने के लिए $.ajax() का उपयोग कर सकते हैं।

ऐसा करने से आप सत्यापन के मामले में बिंदु प्राप्त कर सकते हैं और मूल ब्राउज़र के HTML5 सत्यापनकर्ता चेक ईमेल प्रारूप को बनाएंगे जहां यह समर्थित है।

13

मुझे पता है कि यह प्रश्न पुराना है लेकिन ऐसा करने का सबसे आसान तरीका ईवेंट.संबंधित लक्ष्य की जांच करना होगा। यदि कथन का पहला भाग संबंधित है तो एक त्रुटि फेंकने से रोकने के लिए है लक्ष्य (लक्ष्य शून्य सर्किट होगा क्योंकि शून्य शून्य के बराबर है और ब्राउजर जानता है कि अगर पहली शर्त गलत है तो उसे दूसरी स्थिति की जांच नहीं करनी पड़ेगी & & कथन में)।

तो:

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

यह बहुत बढ़िया है धन्यवाद। मैंने कभी भी संबंधित लक्ष्य के लिए संपत्ति का उपयोग नहीं किया है, मैं निश्चित रूप से कुछ समय पढ़ने पर खर्च करूंगा। – Jake

+2

एक महान दृष्टिकोण की तरह माना जाता है, लेकिन मैं इसके साथ एक समस्या में भाग गया। अंतिम इनपुट से सबमिट बटन पर टैब्स करने से ब्लर हैंडलर चलने से भी रोकता है, जिसे मैं नहीं करना चाहता। –

+0

@TimB किया आपको लगता है कि समस्या के लिए किसी भी समाधान खोजने, मैं एक ही मुद्दा – UmeRonaldo