jQuery: keyPress बैकस्पेस आग नहीं होगा?


186

मुझे आश्चर्य है कि मैं क्या गलत कर रहा हूं:

$(".s").keypress(function(e) {
   switch (e.keyCode) {
      case 8: // Backspace
      //console.log('backspace');
      case 9: // Tab
      case 13: // Enter
      case 37: // Left
      case 38: // Up
      case 39: // Right
      case 40: // Down
         break;

      default:
         doSearch();
   }
});

मैं चाहता हूं कि doSearch()जब मैं Backspaceचाबी मारूं तो मेरा फंक्शन भी निकाल दिया जाए । फिलहाल जब मैं Backspaceक्रोम और सफारी में प्रेस करता हूं तो कुछ भी नहीं होता है ।

कोई विचार?


आप इस jQuery प्लगइन कोड की कोशिश कर सकते हैं। Googlep/js - hotkeys और "बैकस्पेस" कुंजी उपनाम का उपयोग करें
जोस मैनुअल लुकास

3
यह क्रोम पर फायर नहीं करता है लेकिन फ़ायरफ़ॉक्स पर करता है।
विस्कॉन्सिन

नेक्रोपोस्टिंग के लिए क्षमा करें, लेकिन यह ध्यान देने योग्य है कि e.which को e.keyCode पर अधिक पसंद किया जाता है
हेनरी हॉवेसन

जवाबों:


324

के keyupबजाय का उपयोग करें keypress। जब उपयोगकर्ता कुछ दबाता है तो यह सभी प्रमुख कोड प्राप्त करता है


37
keyupजब keypressनहीं होगा तो बैकस्पेस के लिए आग क्यों लगाएगा ?
आरोन दिगुल्ला

यह मामला है। कीप बैकस्पेस को फायर करता है, कीपर नहीं है -> अजीब। क्या यह जांचने का भी मौका है कि दो चाबियाँ cmd-c, या cmd-v, या cmd-a
मैट

17
यह वास्तव में कुंजी पर निर्भर है। आप उपयोग करना चाहते हैं keypressके लिए Enterमहत्वपूर्ण है, keydownके लिए Backspaceऔर बहुत आगे है; अन्यथा आप अपनी घटनाओं को कुछ ब्राउज़रों में पाएंगे जो वास्तव में आपकी अपेक्षा के अनुसार काम नहीं करते हैं, खासकर जब आप कुंजी के लिए डिफ़ॉल्ट व्यवहार को रोकना चाहते हैं। जब आप गलत का उपयोग करते हैं, तो क्या होगा या तो आपकी घटना पर कब्जा नहीं किया गया है (जैसा कि बैकस्पेस के लिए मामला है) या आप इसे स्वीकार नहीं कर सकते हैं; चूंकि यह आपके ईवेंट हैंडलिंग कोड से पहले ही हो जाता है।
13:22 पर srcspider

5
इस जवाब के साथ समस्या यह है कि उपयोग करने से नंबर पैड टूटkeyup जाएगा । क्या आप एक ऐसे उत्तर के बारे में जानते हैं जो पूर्ण कीबोर्ड पर किसी भी कुंजी का सही पता लगाने की अनुमति देता है?
ह्यूजेस

6
keydownसभी कुंजी के लिए बेहतर विकल्प है
artfuldev

32

मैं खुद इस पार आया था। मैंने उपयोग किया है .onइसलिए यह थोड़ा अलग दिखता है लेकिन मैंने ऐसा किया है:

 $('#element').on('keypress', function() {
   //code to be executed
 }).on('keydown', function(e) {
   if (e.keyCode==8)
     $('element').trigger('keypress');
 });

मेरे काम को इधर से उधर करना। मुझे उपयोगकर्ता द्वारा टाइप किए गए ssn को हटाने की आवश्यकता थी इसलिए मैंने jQuery में ऐसा किया

  $(this).bind("keydown", function (event) {
        // Allow: backspace, delete
        if (event.keyCode == 46 || event.keyCode == 8) 
        {
            var tempField = $(this).attr('name');
            var hiddenID = tempField.substr(tempField.indexOf('_') + 1);
            $('#' + hiddenID).val('');
            $(this).val('')
            return;
        }  // Allow: tab, escape, and enter
        else if (event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
        // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
        // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        else 
        {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) &&       (event.keyCode < 96 || event.keyCode > 105)) 
            {
                event.preventDefault();
            }
        }
    });

1
फ़ायरफ़ॉक्स के साथ इस काम करता है अगर आप event.keyCode के बजाय event.which का उपयोग api.jquery.com/event.which
BishopZ

11

यदि आप अपने इनपुट उपयोग के परिवर्तन पर ही घटना को फायर करना चाहते हैं:

$('.s').bind('input', function(){
  console.log("search!");
  doSearch();
});

inputयह भी कीकोड्स का निरीक्षण नहीं करता है। यह भी काम नहीं करेगा।
मार्क पिज़्ज़ाक - त्रिलोन। '

3

.Keypress () के लिए jQuery के दस्तावेज़ के अनुसार, यह गैर-मुद्रण योग्य वर्णों को नहीं पकड़ता है, इसलिए बैकस्पेस कीपर पर काम नहीं करेगा, लेकिन यह कीडाउन और की-अप में पकड़ा जाता है:

जब कीबोर्ड कीबोर्ड इनपुट को पंजीकृत करता है तो कीपर ईवेंट को एक तत्व में भेजा जाता है। यह कीडड इवेंट के समान है, सिवाय इसके कि मॉडिफ़ायर और नॉन-प्रिंटिंग कीज़ जैसे कि Shift, Esc, और ट्रिगर कीडड इवेंट को डिलीट करें लेकिन कीपर इवेंट नहीं। प्लेटफ़ॉर्म और ब्राउज़र के आधार पर दो घटनाओं के बीच अन्य अंतर उत्पन्न हो सकते हैं। ( https://api.jquery.com/keypress/ )

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

jQuery(el).keydown( function() { 
    var that = this; setTimeout( function(){ 
           /** Code that processes backspace, etc. **/ 
     }, 100 );  
 } );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.