JQuery के साथ कीपर ईवेंट को ट्रिगर करने का निश्चित तरीका


260

मैंने इस प्रश्न के सभी उत्तर पढ़ लिए हैं और कोई भी समाधान काम नहीं कर रहा है।

इसके अलावा, मुझे वाइब मिल रहा है कि विशेष पात्रों के साथ कीपर ट्रिगर करना बिल्कुल भी काम नहीं करता है। क्या कोई यह सत्यापित कर सकता है कि यह किसने किया है?


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

दिलचस्प है, मुझे नहीं पता था कि। उस स्थिति में, क्या आप मुझे बता सकते हैं कि क्या घटना को ट्रिगर करने से यह गैर-जेकरी परिवादों के लिए भी ट्रिगर होगा। उदाहरण के लिए यदि मेरे पास सादे जेएस में ऑनकेडाउन है, तो क्या यह मेरे "नकली" ईवेंट पर कब्जा कर लेगा?
मकोरिया

2
हाँ, अगर वहाँ एक onkeydown = '...' सादे js में स्थापित किया गया था। यह नकली घटना से चालू हो जाएगा। मैं इसके बारे में निश्चित नहीं था। लेकिन मैंने एक त्वरित परीक्षण किया और यह काम कर गया।
नादिया अलरामली

2
@ नादिया इसके लिए धन्यवाद! मैंने सभी उत्तरों को सोचकर पढ़ा है कि मेरी अपेक्षाओं के सही होने से पहले चीजें काम क्यों नहीं कर रही थीं। मुझे संदेह है कि बहुत से अन्य लोगों की गलत धारणाएं होंगी।
मिकमेकाना

3
दो साल बाद ... पृष्ठ को पढ़ने से ऐसा लगता है कि निश्चित तरीका है: $ ('इनपुट # खोज')। ट्रिगर ($। घटना ('कीडाउन'), {जो: $। ui.keyCode.ENTER, कीकोड: $। .ui.keyCode.ENTER}));
मोलोकोलोको

जवाबों:


365

यदि आप कीप या कीडाउन इवेंट को ट्रिगर करना चाहते हैं तो आपको बस इतना करना है:

var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
$("input").trigger(e);

42
सवाल यह है कि कैसे ट्रिगर किया जाए, कैसे कब्जा नहीं किया जाए
चाड ग्रांट

2
मैंने घटना को ट्रिगर करने के लिए एक उदाहरण जोड़ा
नादिया अल्रामली

4
बहुत अच्छा जवाब। वर्थ ध्यान दें कि jQuery.Event jQuery 1.3 या अधिक से अधिक के लिए उपलब्ध है। इस प्रश्न में यह प्रासंगिक हो गया: stackoverflow.com/questions/1823617/…
artlung

8
यह मेरे लिए jQuery UI स्लाइडर के साथ काम नहीं किया। मुझे नीचे OreiA के जवाब की तरह e.keyCode सेट करना था।
crizCraig

2
fwiw, मुझे अपने आवेदन के लिए 'कीप' के साथ और अधिक सफलता मिली
मार्क

81

अब jQuery 1.6+ के साथ थोड़ा और संक्षिप्त करें :

var e = jQuery.Event( 'keydown', { which: $.ui.keyCode.ENTER } );

$('input').trigger(e);

(यदि आप jQuery UI का उपयोग नहीं कर रहे हैं, तो इसके बजाय उचित कीकोड में उप करें।)


4
बस 'कीकोड' को 'जो' के लिए स्थानापन्न करना याद रखें।
रिचर्ड निनाबेर

हां आपको सुरक्षित होने के लिए कौन सी और कीकोड को परिभाषित करना चाहिए (यदि ईवेंट श्रोता e.keyCode के लिए जाँच करता है, तो यह केवल तभी काम करेगा जब आप jQuery.Event ऑब्जेक्ट बनाते समय कीकोड को परिभाषित करें)
jackocnr

1
jQuery normalizes जो / कीकोड तो दोनों में करना चाहिए।
निगेल एंजेल

Api.jquery.com के लिंक के लिए +1; और वर्तमान jQuery के संस्करण जो / कीकोड को सामान्य नहीं करते हैं, इसलिए आपको सुरक्षा के लिए दोनों की आपूर्ति करनी चाहिए
विक्टर

2
@SamuelLindblom मैं इसे और अधिक स्पष्ट लिखा होना चाहिए: jQuery के माध्यम से पारित होने वाले घटना गुणों को सामान्य नहीं करता है .trigger(jQuery.Event('name', props))। उदाहरण देखें jsfiddle.net/9ggmrbpd/1 - ट्रिगर इवेंट के गुण इस प्रकार से पास किए जाते हैं। स्रोत कोड: github.com/jquery/jquery/blob/master/src/event.js#L739
Victor

68

असली उत्तर में कीकोड शामिल करना है:

var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
e.keyCode = 50
$("input").trigger(e);

हालांकि jQuery की वेबसाइट का कहना है कि जो और कीकोड सामान्यीकृत हैं, वे बहुत बुरी तरह से गलत हैं। E.which और e.keyCode के लिए मानक क्रॉस-ब्राउज़र जांच करना हमेशा सबसे सुरक्षित होता है और इस मामले में दोनों को परिभाषित करें।


34
+1। वैसे, e.keyCode = e.which = 50;एक लाइन में अच्छा होगा। :)
Sk8erPeter

मुझे अभी पता चला है कि केवल keyCodeकाम करने से काम नहीं चलता है । इसे काम करने के लिए दोनों को सेट करना पड़ा
Tasos K.

@ Sk8erPeter यह तब तक नहीं होगा जब तक कि यह
19

18

यदि आप jQuery UI का उपयोग कर रहे हैं, तो आप इस तरह कर सकते हैं:

var e = jQuery.Event("keypress");
e.keyCode = $.ui.keyCode.ENTER;
$("input").trigger(e);

1
e.which मेरे jQuery UI स्लाइडर के साथ काम नहीं करता है। इस उत्तर के लिए धन्यवाद। यह वास्तव में कारगर है।
crizCraig

5

मैंने इसे कीप के साथ काम किया।

$("#id input").trigger('keyup');

3
मेरे सवाल में 6 साल पहले, मैं भी कीकोड सेट करना चाहता था, लेकिन पता नहीं कैसे।
मकोरिया

4

ठीक है, मेरे लिए कि इस के साथ काम ...

var e2key = function(e) {
    if (!e) return '';
    var event2key = {
        '96':'0', '97':'1', '98':'2', '99':'3', '100':'4', '101':'5', '102':'6', '103':'7', '104':'8', '105':'9', // Chiffres clavier num
        '48':'m0', '49':'m1', '50':'m2', '51':'m3', '52':'m4', '53':'m5', '54':'m6', '55':'m7', '56':'m8', '57':'m9', // Chiffres caracteres speciaux
        '65':'a', '66':'b', '67':'c', '68':'d', '69':'e', '70':'f', '71':'g', '72':'h', '73':'i', '74':'j', '75':'k', '76':'l', '77':'m', '78':'n', '79':'o', '80':'p', '81':'q', '82':'r', '83':'s', '84':'t', '85':'u', '86':'v', '87':'w', '88':'x', '89':'y', '90':'z', // Alphabet
        '37':'left', '39':'right', '38':'up', '40':'down', '13':'enter', '27':'esc', '32':'space', '107':'+', '109':'-', '33':'pageUp', '34':'pageDown' // KEYCODES
    };
    return event2key[(e.which || e.keyCode)];
};

var page5Key = function(e, customKey) {
    if (e) e.preventDefault();
    switch(e2key(customKey || e)) {
        case 'left': /*...*/ break;
        case 'right': /*...*/ break;
    }
};

$(document).bind('keyup', page5Key);

$(document).trigger('keyup', [{preventDefault:function(){},keyCode:37}]); 

2

मामले में आप वर्तमान कर्सर और पाठ चयन को ध्यान में रखना होगा ...

यह मेरे लिए Chrome पर एक AngularJS ऐप के लिए काम नहीं कर रहा था। जैसा कि नादिया मूल टिप्पणियों में बताते हैं, चरित्र इनपुट क्षेत्र में कभी नहीं दिखाई देता है (कम से कम, यह मेरा अनुभव था)। इसके अलावा, पिछले समाधान इनपुट फ़ील्ड में वर्तमान पाठ चयन को ध्यान में नहीं रखते हैं। मुझे एक अद्भुत पुस्तकालय jquery-चयन का उपयोग करना पड़ा ।

मेरे पास एक कस्टम ऑन-स्क्रीन संख्यात्मक कीपैड है जो कई इनपुट क्षेत्रों में भरता है। मुझे करना पड़ा...

  1. फोकस पर, lastFocus.element को सहेजें
  2. धुंधला होने पर, वर्तमान पाठ चयन (प्रारंभ और रोकें) सहेजें

    var pos = element.selection('getPos')
    lastFocus.pos = { start: pos.start, end: pos.end}
  3. जब मेरे कीपैड पर एक बटन दबाया जाता है:

    lastFocus.element.selection( 'setPos', lastFocus.pos)
    lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'})



1

इसे इस डॉक्स की तरह पूरा किया जा सकता है

$('input').trigger("keydown", {which: 50});

1
यह काम करने के लिए प्रतीत नहीं होता है क्योंकि यह extraParameters तर्क का उपयोग करता है जो इवेंट तर्क के अंदर कुछ भी सेट नहीं करता है, लेकिन इवेंट हैंडलर कॉलबैक में अतिरिक्त तर्क जोड़ता है।
TimeWaster

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