2016-11-12 9 views
5

पर काम करता है जब मैं पहली बार टैब बटन दबाता हूं, यह काम करता है और टैब को रोका जाता है, हालांकि अगर मैं इसे फिर से दबाता हूं, तो डिफ़ॉल्ट को रोका नहीं जाता है, और मैं इनपुटबॉक्स से बाहर टैब करता हूं ।event.preventDefault() केवल

अगर मैं कुछ लिखते हैं तो टैब तो फिर कुछ और टैब टाइप करें, तो यह डिफ़ॉल्ट हर

रोका है समस्या यह है कि मैं एक पंक्ति में टैब दो बार नहीं कर सकता है। कोई विचार क्या समस्या हो सकती है?

$("#functionSearch").on("change propertychange keyup",function(event) { 
    event.preventDefault(); 
    console.log(event) 
    if (event.which == 9) { 
     console.log("TAB") 
    }else{ 
     clearHighlight(); 
     var input = $(this).val(); 
     if(input.length > 0){ 
      filteredArr = jQuery.grep(linksArr, function(val, index) { 
       return (val.toLowerCase().indexOf(input.toLowerCase()) != -1); 
      }); 
      selectElements(filteredArr); 
     } 
    } 

}); 

// MAY BE USEFUL 
function selectElements(filteredArr){ 
    $(filteredArr).each(function(index, link){ 
     var id = link.split("~")[1] 
     $("#"+id).addClass("selected"); 
    }); 
    highlightFirstElement(); 
    } 

    function highlightFirstElement(){ 
     $(".selected").first().addClass("highlighted"); 
    } 

    function highlightNextElement(){ 
     $(".selected").next().addClass("highlighted"); 
    } 

    function clearHighlight(){ 
     $(".highlighted").removeClass("highlighted"); 
     $(".selected").removeClass("selected"); 
    } 

<div id="functionSearchDiv" class="funSearch"> 
    <input type="text" id="functionSearch"></input> 
</div> 
+1

क्या आप इसके लिए कोडपेन या जेएसफ़िल्ड बना सकते हैं? – RobertAKARobin

+0

क्या आप अपने '# functionSearch' तत्वों को किसी अन्य कोड से बदल रहे हैं? –

+0

@RobertAKARobin jsfiddle इसे एक बार भी रोक नहीं रहा है इसलिए मैं कोड कलम की कोशिश कर रहा हूं https://jsfiddle.net/6n0qfqt4/ – code511788465541441

उत्तर

2

समय keyup तक सक्रिय होने पर, टैब कुंजी पहले से ही एक और तत्व को फोकस विस्थापित अपने काम किया है हो सकता है, जिसका अर्थ है कि keyup घटना बजाय इनपुट पर निकाले जाने की है कि अन्य तत्व पर सक्रिय किए जाएंगे खेत।

सबसे आसान समाधान के बजाय keydown को सुनना है (working fiddle देखें)।

1

आपके पास कुछ चीजें चल रही हैं। आप कुंजीपटल का उपयोग कर रहे हैं, जब आप टैब दबाते हैं, उस टैब द्वारा जिसे आप event.preventDefault() कहते हैं, फोकस पहले से ही अगले तत्व में स्थानांतरित हो चुका है। अगला, आपके पास संपत्ति परिवर्तन और श्रोता परिवर्तन, पहले जैसा ही है। इसके अतिरिक्त जब आप दूसरी बार टैब को दो बार दबाते हैं तो कोई बदलाव नहीं होता क्योंकि संपत्ति दूसरी बार नहीं बदली! आपको कीप की बजाय कीडाउन का उपयोग करना होगा और ऑर्डर की जांच करनी चाहिए कि आपके ईवेंट को निकाल दिया जा रहा है!

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