2015-09-06 9 views
5

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

Code Pen

एचटीएमएल

<textarea></textarea> 
<textarea></textarea> 
<textarea></textarea> 

जे एस

$('textarea').on('keydown', function(e) { 
    if (e.metaKey && e.which === 40) { 
    console.log('test'); 
    $(this).trigger({ 
     type: 'keypress', 
     which: 9 
    }); 
    } 
}); 

उत्तर

6

क्योंकि टैब घटना एक देशी ब्राउज़र घटना/फोकस को बदलने के लिए कार्रवाई है। .trigger() फ़ंक्शन केवल ईवेंट हैंडलर को ट्रिगर करता है जो इसे सौंपा गया है। नोट अधिक jQuery's site से दी गई जानकारी होती है:

.trigger() फ़ंक्शन ऐसी फ़ाइल इनपुट बॉक्स या एक लंगर टैग पर क्लिक करने के रूप स्थानीय ब्राउज़र घटनाओं, नकल करने के लिए नहीं किया जा सकता। ऐसा इसलिए है क्योंकि, इन घटनाओं के अनुरूप jQuery की घटना प्रणाली का उपयोग करके कोई ईवेंट हैंडलर संलग्न नहीं है।

इसके लिए एक प्लग-इन है, हालांकि इसे संभालने के लिए jquery-simulate कहा जाता है। कहा जा रहा है कि tab कुंजी बदलना फोकस वास्तव में वेब ब्राउज़र में एक डिफ़ॉल्ट कार्रवाई है। एक ब्राउज़र देशी घटना फायरिंग मतलब यह नहीं है के रूप में KeyboardEvents के लिए दस्तावेज़ का उल्लेख है, यह डिफ़ॉल्ट क्रिया है क्या करेंगे:

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

+0

तो घटना में '.trigger()' ईवेंट नहीं है ... मैन्युअल रूप से ईवेंट को ट्रिगर करना? यह भ्रामक है। या क्या मुझे कुछ याद आ रहा है? –

+0

कोई विचार क्यों [यह] (http://codepen.io/anon/pen/yYNLjE?editors=101) काम नहीं कर रहा है? जिस पृष्ठ से आपने लिंक किया है [कहता है] (https://learn.jquery.com/events/triggering-event-handlers/#how-can-i-mimic-a-native-browser-event-if-not-trigger) "... प्रोग्रामेटिक रूप से एक ऐसी घटना बना सकता है जो वास्तव में व्यवहार करता है जैसे किसी के पास वास्तव में ..."। मैंने यह सब कुछ किया [https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events) मार्गदर्शिका, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। –

+2

@AdamZerner यह वास्तव में थोड़ा सा भ्रामक है, ['KeyEvents'] (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) के लिए प्रलेखन में। पृष्ठ के निचले हिस्से में एक नोट है जो उल्लेख करता है: * "ध्यान दें कि किसी ईवेंट को मैन्युअल रूप से फायर करना उस घटना से जुड़ी डिफ़ॉल्ट क्रिया उत्पन्न नहीं करता है। उदाहरण के लिए, मैन्युअल रूप से एक महत्वपूर्ण ईवेंट को फायर करने से उस पत्र को फ़ोकस में प्रकट नहीं किया जाता है यूआई घटनाओं के मामले में, सुरक्षा कारणों से यह महत्वपूर्ण है, क्योंकि यह स्क्रिप्ट को उपयोगकर्ता क्रियाओं को अनुकरण करने से रोकता है जो ब्राउज़र के साथ बातचीत करता है। "* –

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