2009-11-26 7 views
14

में टैब कुंजी फ़ंक्शन अनुकरण करें मेरे पास बहुत सारी प्रविष्टियां हैं। एक बार जब मैं वर्तमान टेक्स्टबॉक्स में मान दर्ज करता हूं, तो मैं अपना फोकस अगले टेक्स्टबॉक्स में बदलना चाहता हूं। और अंतिम प्रक्रिया तक इस प्रक्रिया को जारी रखना चाहते हैं। मेरा सवाल यह है कि टेक्स्ट बॉक्स में मान दर्ज करने के बाद जावास्क्रिप्ट कोडिंग के माध्यम से टैब कुंजी को अनुकरण करना संभव है।जावास्क्रिप्ट

कुंजीपटल में टैब कुंजी दबाए बिना, मैं जावास्क्रिप्ट के माध्यम से एक ही कार्यक्षमता लाने के लिए चाहता हूं। क्या यह संभव है ?

+8

यह बेकार है, मैं एक 'टैब key' रहा हूँ और यहां जवाब केवल अगले '। फ़ोकस() 'दें। – Qwerty

+0

जटिल! इस संबंधित धागे को देखें: http://stackoverflow.com/questions/961532/firing-a-keyboard-event-in-javascript – ptim

+0

@Praveenjayapal को कभी भी ऐसा उत्तर मिलता है जो टैब कुंजी को अनुकरण करता है और केवल फोकस नहीं बदलता ?? – Pomster

उत्तर

12
function nextField(current){ 
    for (i = 0; i < current.form.elements.length; i++){ 
     if (current.form.elements[i].tabIndex == current.tabIndex+1){ 
      current.form.elements[i].focus(); 
      if (current.form.elements[i].type == "text"){ 
       current.form.elements[i].select(); 
      } 
     } 
    } 
} 

यह, वर्तमान क्षेत्र के साथ आपूर्ति करते समय, अगले टैब इंडेक्स के साथ फ़ील्ड पर फोकस करेगा। प्रयोग के रूप में

<input type="text" onEvent="nextField(this);" /> 
+0

में नेविगेट नहीं करती हैं यदि काम नहीं करता है तो HTML अनुक्रमणिका मैन्युअल रूप से सेट नहीं होती है। '.tabIndex' संपत्ति रिटर्न 0. –

31

तुम सिर्फ अगर तुम jQuery इस कोड का उपयोग कर रहे टैब अनुकरण करेगा, उदाहरण के लिए (कि इनपुट तत्व पर ध्यान केंद्रित() विधि लागू द्वारा) अगले इनपुट फ़ील्ड पर ध्यान देने की आवश्यकता इस प्रकार होगा कुंजी जब दर्ज दबाया जाता है:

var inputs = $(':input').keypress(function(e){ 
    if (e.which == 13) { 
     e.preventDefault(); 
     var nextInput = inputs.get(inputs.index(this) + 1); 
     if (nextInput) { 
      nextInput.focus(); 
     } 
    } 
}); 
+9

@ जॉन jQuery एक जावास्क्रिप्ट लाइब्रेरी है, इसलिए कोई भी" jquery code "मान्य जावास्क्रिप्ट कोड भी है। मैंने 3 साल पहले इस प्रश्न का उत्तर दिया है और मेरे जवाब में मैंने "अगर आप jQuery का उपयोग कर रहे हैं" डाल दिया है। अगर किसी ने मुझसे पूछा (वापस तो) "वेनिला जेएस" समाधान प्रदान करने के लिए मैं शायद यह करूँगा। मैं सिर्फ आपके जैसे लोगों को समझ नहीं पा रहा हूं (कोई अपराध नहीं है) वास्तव में पुराने प्रश्नों को छोड़कर लोगों के उत्तरों को वोट देना। ऐसा लगता है कि आप इसे मजाक के लिए कर रहे हैं ... – krcko

+0

@ जॉन मैं वास्तव में नहीं जानता कि आंतरिक HTML को क्या करना है जो डोम पेड़ को पार करने और तत्व को ध्यान में रखते हुए करना है (उदाहरण के लिए मैंने दिया) लेकिन एफवाईआई आंतरिक HTML का हिस्सा है [ एचटीएमएल 5 वर्किंग ड्राफ्ट] (http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0) (और मैं जोड़ सकता हूं - अंत में!)। वैसे भी, इसे अब तक मानकीकृत नहीं किया जा सकता है, लेकिन निश्चित रूप से लंबे समय तक सभी प्रमुख ब्राउज़रों द्वारा समर्थित किया गया था। – krcko

+0

मैं सहमत हूं कि jQuery निश्चित रूप से इस तरह के छोटे उदाहरण के लिए एक ओवरकिल है, लेकिन वास्तव में यह आपके पृष्ठ पर जावास्क्रिप्ट कोड का एकमात्र टुकड़ा नहीं होगा, इसलिए jQuery (या कुछ अन्य लाइब्रेरी) का उपयोग आपके लेखन के बाद प्रोत्साहित किया जाता है अपने क्रॉस-ब्राउज़र कोड को पहिया को फिर से शुरू करने के रूप में सही ढंग से माना जाता है (जिसे मैं कई बार जोड़ सकता हूं) और आप निश्चित रूप से विभिन्न उपकरणों पर विभिन्न ब्राउज़रों में मौजूद सभी किनारे-मामलों को कवर करने में सक्षम नहीं होंगे (और यह राशि पिछले कुछ वर्षों में विविधता लगातार बढ़ रही है)। – krcko

16

टैब कार्यक्षमता का अनुकरण करने के थोड़ी देर पहले की जरूरत है, और अब मैं released it as a library का उपयोग करता है है।

EmulateTab: एक jQuery प्लगइन किसी पृष्ठ पर तत्वों के बीच टैबबिंग अनुकरण करने के लिए।

आप see how it works in the demo कर सकते हैं।

if (myTextHasBeenFilledWithText) { 
    // Tab to the next input after #my-text-input 
    $("#my-text-input").emulateTab(); 
} 
+7

@ जॉन: आपकी राय के लिए धन्यवाद। –

+5

EmulateTab इस समस्या का एक बड़ा समाधान है। निश्चित रूप से, यह jquery है, लेकिन यह अभी भी आईएमओ – DarinH

+3

प्रश्न के लिए प्रासंगिक है टैब टैबप्रेस को वास्तव में अनुकरण करने के लिए उपरोक्त, अन्य सभी उत्तरों बेकार हैं। – Qwerty

1

पहले प्रश्न में, आपको हर इनपुट पर एक ईवेंट श्रोता की आवश्यकता नहीं है जो अपमानजनक होगा।

इसके बजाय, सुनने के लिए कुंजी दर्ज करें और वर्तमान में केंद्रित तत्व का उपयोग document.activeElement

window.onkeypress = function(e) { 
    if (e.which == 13) { 
     e.preventDefault(); 
     var nextInput = inputs.get(inputs.index(document.activeElement) + 1); 
     if (nextInput) { 
      nextInput.focus(); 
     } 
    } 
}; 

एक घटना श्रोता कई की तुलना में बेहतर है, विशेष रूप से कम बिजली/मोबाइल ब्राउज़र पर खोजने के लिए।

+1

कोई अगला इनपुट (अगला इनपुट) फोकस नहीं किया जाएगा अगर अगला इनपुट अक्षम, छुपा हुआ है या एक अभिभावक है जो छुपा हुआ है। इन जांचों को करना है। –

+2

आप इनपुट वैरिएबल भी घोषित नहीं करते हैं। है ना? – dthree

-1

मैं मेरे लिए काम करने के लिए ltiong_sh के जवाब एडाप्टर है:

function nextField(current){ 
    var elements = document.getElementById("my-form").elements; 
    var exit = false; 
    for(i = 0; i < elements.length; i++){ 
     if (exit) { 
      elements[i].focus(); 
      if (elements[i].type == 'text'){ 
       elements[i].select(); 
      } 
      break; 
     } 
     if (elements[i].isEqualNode(current)) { 
      exit = true; 
     }  
    } 
} 
1

यह एक फार्म के माध्यम से एक टैब simulates और कब प्रविष्ट कुंजी दबाने अगले इनपुट करने के लिए ध्यान केंद्रित करने देता है।

window.onkeypress = function(e) { 
    if (e.which == 13) { 
     e.preventDefault(); 
     var inputs = document.getElementsByClassName('input'); 
     for (var i = 0; i < inputs.length; i++) { 
     if (document.activeElement.id == inputs[i].id && i+1 < inputs.length) { 
      inputs[i+1].focus(); 
      break; 
     } 
    } 
0

मुझे ऐसा कोई जवाब नहीं मिला जो मैं चाहता था। मुझे एक समस्या थी जहां कुछ लिंक तत्व थे जिन्हें मैं नहीं चाहता था कि उपयोगकर्ता टैबबिंग करें। यह क्या मैं के साथ आया है:

(। ध्यान दें कि अपने खुद के कोड में मैं var all लाइन पर a:not(.dropdown-item) बजाय a इस्तेमाल किया)

function(event){ 
     //not that this doesn't work with tab-indexes 

     //allows fluid tabbing through 

     //isolate the node that we're after 
     var current = event.target; 

     //find all tab-able elements 
     var all = document.querySelectorAll('input, button, a, area, object, select, textarea'); 

     var currentIndex; 

     for(var i = 0; i < all.length; i++){ 
      //loop through all tab-able elements 
      if(current.isEqualNode(all[i])){ 
       //if a match is found then assign index 
       currentIndex = i; 
      } 
     } 

     //focus the following element 
     all[currentIndex + 1].focus(); 
} 
संबंधित मुद्दे