2013-05-16 1 views
6

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

मेरे पास एक ऐसा फॉर्म है जिसे मैं कई jquery accordion टैब में तोड़ रहा हूं। मैं चाहता हूं कि उपयोगकर्ता टैब 1 के अंतर्गत एक टेक्स्टफील्ड भरने में सक्षम हो, और उसके बाद टैब 2 को स्वचालित रूप से टैब 2 खोलने के लिए कुंजी कुंजी दबाएं और उस टैब में टेक्स्टफील्ड पर फ़ोकस करें। मेरी समस्या यह है कि क्रोम में डिफ़ॉल्ट टैब कीडाउन व्यवहार को रोक रहा है।

$("form#new_story").keydown(function (e) { 
    if(!e) var e = window.event; 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) { 
     e.preventDefault(); 
     alert("tab was keyed"); 
    } 
}); 

मैंने क्रोम, एफएफ और सफारी में इसका परीक्षण किया है। एफएफ और सफारी में अच्छी तरह से काम करता है, लेकिन जब कोई उपयोगकर्ता टैब कुंजी के नीचे क्रोम कुंजी का उपयोग कर रहा है, तो ईवेंट ट्रिगर करने से पहले टेक्स्टफील्ड में एक वास्तविक टैब दर्ज किया जाता है। मैं इस व्यवहार को रोकना चाहता हूं, लेकिन घटना को ट्रिगर्स से पहले टैब स्पष्ट रूप से दर्ज किया जा रहा है। क्या इसे रोकने का कोई तरीका है?

+0

टैब * * कुंजीपटल' घटना से पहले * दर्ज किया गया है? असंभव ध्वनि। लेकिन इसे रोकने के लिए, आप 'कीप्रेस' पर हुक कर सकते हैं और उसे दबा सकते हैं। – Bergi

+0

'कीप्रेस' ने टैब प्रेस को कैप्चर नहीं किया (मुझे पता है कि 'कीप्रेस' यानी पुराने संस्करणों में गैर-कैरेक्टर कुंजियों को कैप्चर नहीं करता है। यह नहीं पता था कि यह क्रोम में गैर-वर्ण कुंजी को कैप्चर नहीं करेगा। भले ही, मैं अभी समस्या मिली है। यह jquery accordion और jquery मान्य के बीच एक बहुत ही मजेदार बातचीत है। इसे नीचे दिए गए उत्तर के रूप में सबमिट करेंगे। –

उत्तर

1

यह पता चला है कि समस्या jquery मान्य द्वारा ट्रिगर की गई थी। जैसे ही मैं onfocusout: false मैं अपेक्षा के अनुरूप टैब keydown घटना पर कब्जा करने में सक्षम था सेट के रूप में

$("form#new_story").validate({ 
         ignore: [], 
         onkeyup: false, //stop eager validation of fields so to not hit server each time user clicks a key in the email field 
         onfocusout: true, 
         ... 
        }; 

: मैं विकल्पों में से इस सेट के साथ के रूप में प्रत्येक पाठ क्षेत्र मान्य किया गया था।

मुझे नहीं पता कि यह मामला क्यों होगा। या तो jquery accordion या jquery मान्य में एक बग होना चाहिए।