jQuery: टेक्स्ट बॉक्स के भीतर TAB कुंजी को कैसे कैप्चर करें


145

मैं TAB कुंजी को कैप्चर करना चाहता हूं, डिफ़ॉल्ट कार्रवाई को रद्द करता हूं और अपने स्वयं के जावास्क्रिप्ट फ़ंक्शन को कॉल करता हूं।

जवाबों:


249

संपादित करें: चूंकि आपके तत्व को गतिशील रूप से डाला गया है, इसलिए आपको अपने उदाहरण के रूप में प्रत्यायोजितon() का उपयोग करना होगा, लेकिन आपको इसे कीडाउन ईवेंट में बाँधना चाहिए, क्योंकि @Marc टिप्पणियों के अनुसार, IE में कीपर ईवेंट गैर-वर्ण कुंजियों को कैप्चर नहीं करता है:

$("#parentOfTextbox").on('keydown', '#textbox', function(e) { 
  var keyCode = e.keyCode || e.which; 

  if (keyCode == 9) { 
    e.preventDefault(); 
    // call custom function here
  } 
});

यहां एक उदाहरण देखें ।


जब मैं IE6 + में TAB को धक्का देता हूं, तो घटना में आग नहीं लगती है (हालांकि यह किसी भी अल्फ़ान्यूमेरिक कुंजी पर आग लगाता है ...) .live ('कीपर', fn) का उपयोग करने की आवश्यकता है
जॉन एरिकसन

यदि केवल लाइव के साथ काम करता है, तो शायद आप अपने टेक्स्टबॉक्स तत्व को गतिशील रूप से सम्मिलित कर रहे हैं, यदि तत्व पहले से ही पृष्ठ पर है, तो यह काम करेगा, इस उदाहरण की जांच करें: jsbin.com/oguhe
CMS

हां टेक्स्टबॉक्स को गतिशील रूप से डाला गया है। आईडी के साथ मेरा उदाहरण #textbox प्रश्न को सरल बनाने के लिए था =)
जॉन एरिकसन

@, आप $ (चयनकर्ता) .live ("कीडाउन", fn) का उपयोग नहीं कर रहे हैं? CMS कीडाउन का उपयोग करने का सुझाव दे रहा है क्योंकि IE में, कीपर नॉनट्रैकर कीज़ के लिए काम नहीं करता है, (जैसे टैब)
Marc

5
@ एपलग्रेव: यह ऐसा कहता है, हां, लेकिन यह सच नहीं है - कम से कम कीपर के लिए। टैब के लिए e.which 0 है और e.keyCode 9 है (जैसा कि होना चाहिए)। FF 3.5.16, jQuery 1.6.2 में परीक्षण किया गया।
जॉन्डोडो

19

JQuery 1.9 में काम करने का उदाहरण:

$('body').on('keydown', '#textbox', function(e) {
    if (e.which == 9) {
        e.preventDefault();
        // do your code
    }
});

2
e.preventDefault();व्हॉट्सएप को टेक्स्टबॉक्स में डालने से रोकने के लिए डबल बनाएं ।
stil

12
$('#textbox').live('keypress', function(e) {
    if (e.keyCode === 9) {
        e.preventDefault();
        // do work
    }
});

2
इसके अलावा, डिफ़ॉल्ट कार्रवाई को रद्द करने के लिए, e.preventDefault () का उपयोग करें; फ़ंक्शन की पहली पंक्ति में।
बजे जोश लेइटेल

@Jon, keypress IE में
मार्क

@ मैर्क मैं देखता हूं, मैं IE और FF के साथ कैसे संगत हो सकता हूं?
जॉन एरिकसन

4
^ ^ विडंबना ... jQuery को ब्रदर्स के बीच की खाई को पाटना है, ताकि आपको इस तरह से सामान के बारे में चिंता न करना पड़े।
जगद

@ जग, jQuery के इरादे का अनुमान नहीं लगा सकते। कीप और कीडाउन अच्छे कारण के बराबर नहीं हैं। यह सिर्फ इतना होता है, इस स्थिति को भेद की आवश्यकता नहीं है।
मार्क

7

ऊपर दिखाए गए तरीके मेरे लिए काम नहीं करते थे, हो सकता है कि मैं थोड़ा पुराने जकूज़ी का उपयोग कर रहा हूं, फिर अंत में नीचे दिखाया गया कोड स्निपेट काम करता है - बस उसी स्थिति में किसी को पोस्ट करना

$('#textBox').live('keydown', function(e) {
    if (e.keyCode == 9) {
        e.preventDefault();
        alert('tab');
    }
});

5

टैब पर एक कुंजी का उपयोग करने का एक महत्वपूर्ण हिस्सा यह जान रहा है कि टैब हमेशा पहले से ही कुछ करने की कोशिश करेगा, अंत में "झूठे" वापस करने के लिए मत भूलना।

मैंने जो किया था यह रहा। मेरे पास एक फ़ंक्शन है जो .blur पर चलता है और एक फ़ंक्शन जो स्वैप करता है जहां मेरा फ़ॉर्म फ़ोकस है। मूल रूप से यह फॉर्म के अंत में एक इनपुट जोड़ता है और ब्लर पर गणनाओं को चलाने के दौरान वहां जाता है।

$(this).children('input[type=text]').blur(timeEntered).keydown(function (e) {
        var code = e.keyCode || e.which;
        if (code == "9") {
            window.tabPressed = true;
            // Here is the external function you want to call, let your external
            // function handle all your custom code, then return false to
            // prevent the tab button from doing whatever it would naturally do.
            focusShift($(this));
            return false;
        } else {
            window.tabPressed = false;
        }
        // This is the code i want to execute, it might be different than yours
        function focusShift(trigger) {
            var focalPoint = false;
            if (tabPressed == true) {
                console.log($(trigger).parents("td").next("td"));
                focalPoint = $(trigger).parents("td").next("td");

            }
            if (focalPoint) {
                $(focalPoint).trigger("click");
            }
        }
    });


1

मान लें कि आपके पास Idxt के साथ TextBox है

$("[id*=txtName]").on('keydown', function(e) { 
  var keyCode = e.keyCode || e.which; 
  if (keyCode == 9) {
     e.preventDefault();
     alert('Tab Pressed');
 }
}); 

1

आप इस JQuery API का उपयोग करके एक ईवेंट टैब कैप्चर कर सकते हैं ।

$( "#yourInputTextId" ).keydown(function(evt) {
   if(evt.key === "Tab")
      //call your function
});

यह evt.preventDefault () जोड़ने के बाद मेरे लिए काम करता है; अगर में
LowFieldTheory

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.