2013-08-22 8 views
32

काम नहीं कर रहा है मैं क्रेडिट कार्ड सत्यापन विफलता पर ध्यान केंद्रित करने की कोशिश कर रहा हूं। लेकिन अजीब focus() काम नहीं कर रहा है।jQuery फोकस

$('#cc_number').validateCreditCard(function (result) { 
    if (result.length_valid && result.luhn_valid) { 

    } else { 
     $("#cc_number").focus(); 
     return false; 
    } 
}); 

<input type="text" id='cc_number' name="cc_number" /> 
+1

क्या है "काम नहीं कर रहा": इसके बजाय आप इस दृष्टिकोण का पालन कर सकते हैं? हर बार जब मैं इनपुट को धुंधला करता हूं तो मुझे एक चेतावनी मिलती है। – j08691

+1

क्रोम में यह काम करता है –

+0

केवल चेतावनी काम कर रहा है .. लेकिन क्यों फोकस असफल .. :( –

उत्तर

56

mentioned in the comments के रूप में, अपने मूल jsfiddle समाधान में शामिल है।

फोकस कॉल पर टाइमआउट डालना एक कामकाज है।

setTimeout(function(){ 
    $("#cc_number").focus(); 
}, 0); 

मैं 100% यकीन नहीं है, लेकिन यह हो सकता है कि के रूप में चेतावनी कलंक पर कहा जाता है, तो आप वास्तव में कभी पाठ बॉक्स फोकस कम करने के लिए अनुमति दे रहे हैं, और इसलिए जब फोकस कहा जाता है, यह पहले से ही है यह।

एक टाइमआउट का उपयोग करके, आप तर्क को एक अलग थ्रेड में डाल रहे हैं, जो मुख्य जावास्क्रिप्ट कोड (कॉलबैक फ़ंक्शन की तरह) से अलग होता है।


लेकिन जैसे-जैसे अपने प्रश्न टिप्पणियां भी उल्लेख है, जब तक मान्यता गुजरता फोकस मजबूर कर कष्टप्रद है।

लेकिन यह एक यूएक्स आलोचना से अधिक है।

+4

यदि आप समझा सकते हैं कि यह क्यों काम करता है, तो मैं इसे पूरी तरह से +1 कर दूंगा। – Richard

+0

@ रिचर्ड मैं 100% निश्चित नहीं हूं, लेकिन मुझे विश्वास है कि यह इसलिए है क्योंकि वर्तमान धागे से ध्यान केंद्रित किया जाता है। छोटा टाइमआउट वास्तव में अप्रासंगिक है, यह सिर्फ इतना है कि टाइमआउट शेष कोड के साथ रैखिक नहीं चलता है, कॉलबैक फ़ंक्शन की तरह। इसलिए मैंने भ्रम से बचने के लिए जवाब में संशोधन किया है। – Curt

+2

यह घटनाओं के समय के कारण है। यदि आप धुंध घटना के भीतर फोकस सेट करते हैं, तो इनपुट फोकस प्राप्त करता है। हालांकि, क्योंकि धुंधला घटना पूरी नहीं हुई है, क्योंकि यह घटना पूरी होने पर फोकस खो जाएगी। टाइमआउट जोड़ने से ब्लर इवेंट पूरा होने के बाद। फोकस() हो सकता है। आप भी एक ही प्रभाव के लिए मूल घटना को रद्द करने में सक्षम हो सकते हैं। – Richard

17

आपका डोम रीफ्रेश हो रहा है इसलिए फोकस यहां काम नहीं कर रहा है।

$('#cc_number').validateCreditCard(function (result) { 
    if (result.length_valid && result.luhn_valid) { 

    } else { 
     $("#cc_number").attr("autofocus","autofocus") 
     return false; 
    } 
}); 

संबंधित मुद्दे