2011-01-21 12 views
36

तो, मुझे टैब स्क्रिप्ट दबाए जाने पर मेरी स्क्रिप्ट को चलाने में कुछ परेशानी हो रही है। कुछ त्वरित googling के बाद, टैब के लिए चारकोड 9 है। साथ ही, जब हम बात कर रहे हैं, तो जांच करने के लिए कोई बेहतर तरीका है कि क्या चाकोड्स का उपयोग किए बिना एक कुंजी दबाई जाती है? मैं पूछ रहा हूं क्योंकि charcode का उपयोग करते समय मैं फायरबग द्वारा निम्नलिखित चेतावनी प्राप्त करता रहता हूं:jQuery: टैब-कुंजी के लिए कीप?

एक कीप घटना की 'charCode' प्रॉपर्टी का उपयोग नहीं किया जाना चाहिए। मूल्य व्यर्थ है।

वैसे भी, यह अभी भी काम करता है, इसलिए यह समस्या नहीं है। यह कोड मैं उपयोग करता हूं:

$('/* my inputs */').keyup(function(e) { 
    console.log('keyup called'); 
    var code = e.keyCode || e.which; 
    if (code == '9') { 
    console.log('Tab pressed'); 
    } 
}); 

उपर्युक्त कोड का उपयोग करके कंसोल खाली छोड़ दिया गया है, फ़ायरबग का उपयोग करके कुछ भी जोड़ा नहीं गया है। बेशक मैंने वास्तव में पाठ लॉगिंग के बजाय सामान करने की कोशिश की है, लेकिन कुछ भी निष्पादित नहीं करता है। तो क्या कोई देख सकता है कि यह क्यों काम नहीं कर रहा है? क्या कुंजी दबाए जाने का कोई बेहतर तरीका है?

अग्रिम धन्यवाद।

उत्तर

66

मेरे कूबड़ जब आप टैब कुंजी दबाते हैं, आपके प्रपत्र के इनपुट, ध्यान केंद्रित खो देता है कि इससे पहले कि KeyUp होता है । बदलते शरीर के लिए बाध्य है, इस तरह का प्रयास करें:

$('body').keyup(function(e) { 
    console.log('keyup called'); 
    var code = e.keyCode || e.which; 
    if (code == '9') { 
    alert('Tab pressed'); 
    } 
}); 

फिर, यह है कि अगर काम करता है (यह मेरे लिए करता है) के बजाय keydown के लिए बाध्य बदलने का प्रयास करें, और झूठे लौट आते हैं। इस तरह आप अपना खुद का कस्टम व्यवहार लागू कर सकते हैं।

$('.yourSelector').keydown(function(e) { 
    console.log('keyup called'); 
    var code = e.keyCode || e.which; 
    if (code == '9') { 
    alert('Tab pressed'); 

    return false; 
    } 

}); 

इन दोनों में से एक काम करना चाहिए ... अगर यह शरीर है, तो आप शरीर पर एक keydown हैंडलर देते हैं सकता है, तो अगर यह टैब है, ध्यान देने के साथ क्षेत्र को खोजने (मुझे लगता है कि वहाँ समारोह .hasFocus()?) , और यदि वह वही है जो आप चाहते हैं, तो आगे बढ़ें और झूठी वापसी करें। अन्यथा, ब्राउज़र को इसकी बात करने दें।

आप एक टैब वर्ण के साथ क्षेत्र को अद्यतन करना चाहते हैं तो अपने कॉलबैक में इस प्रयास करें:

var theVal = $(this).val(); 
theVal = theVal + ' '; 
$(this).val(theVal); 

यह परीक्षण नहीं किया है, लेकिन यह काम करना चाहिए। यदि आप परेशानी दे रहे हैं, तो आप टैब वर्ण के बजाय 3 या 4 रिक्त स्थान भी जोड़ सकते हैं।

+1

आप सही थे, कुंजीडाउन निष्पादित होने से पहले इनपुट फोकस खो देता है। मैंने कीपैड को कीपैड में बदल दिया और यह अब काम करता है जैसे काम करना चाहिए। धन्यवाद दोस्त! – qwerty

+0

एचएम, मैं अब एक और समस्या पर ठोकर खाई। वापसी झूठी का उपयोग करना; मैं इनपुट का उपयोग नहीं कर सकता, जो इसे बेकार बनाता है। मैंने रोकथाम की कोशिश की, लेकिन यह काम नहीं कर रहा है। क्या इसे छोड़ने का कोई तरीका है? – qwerty

+0

मुझे लगता है कि आप इनपुट में 'टैब' वर्ण जोड़ना चाहते हैं, है ना? मैंने अपने जवाब में एक कोड उदाहरण जोड़ा। –

-1

यदि कुछ भी नहीं होता है इससे कोई फर्क नहीं पड़ता कि आप किस कुंजी को दबाते हैं, शायद आपके द्वारा उपयोग किए जाने वाले चयनकर्ता के साथ कुछ गड़बड़ है? आप सत्यापित कर सकते आप शायद की तरह कुछ के साथ ठीक से चयन कर रहे हैं,:

console.log($('/* my inputs */').length); 
+0

मैं जिस चयनकर्ता का उपयोग करता हूं वह है: $ ('। NameOfTheForm इनपुट') – qwerty

1
e = e || window.event; 
if(e.keyCode == 9) 
alert("Tab pressed"); 

प्रयास करें इस

+0

अभी भी काम नहीं करता है। मैंने अन्य कुंजियों का उपयोग करने की कोशिश की (प्रवेश (13) और पेज-डाउन (34) का प्रयास किया), लेकिन कोई भी काम नहीं कर रहा है। मुझे पता है कि कुंजीपटल को बुलाया जाता है, इसलिए यह वहां कुछ है। – qwerty

+0

अलर्ट e.keyCode फिर, और देखें कि क्या हो रहा है। – AlanFoster

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