2011-02-08 18 views
26

यह प्रकट नहीं होता है कि बैकस्पेस कुंजी दबाए जाने पर jQuery कीप, कीडाउन या कीप्रेस विधियों को निकाल दिया जाता है। मैं बैकस्पेस कुंजी को दबाने में कैसे जाउंगा?jQuery का उपयोग कर बैकस्पेस कुंजी को कैसे फंसाना है?

+0

बस स्पष्ट करने के लिए, जब मैं बैकस्पेस कुंजी दबाया जाता हूं और कार्रवाई करता हूं तो मैं जाल करना चाहता हूं। जब मैं टेक्स्टबॉक्स से अंतिम वर्ण हटा दिया जाता है तो मैं पृष्ठ पर कुछ बटनों की सक्षम स्थिति बदल रहा हूं। इसलिए, मैं अभी भी बैकस्पेस कुंजी को अपने सामान्य ऑपरेशन करने के लिए चाहता हूं। – ChrisP

+1

यह सच नहीं है। यह कीप और कीडाउन विधियों में दिखाई देता है। केवल कुंजीपटल में प्रकट नहीं होता है। – Line

+0

@ रिकस्मिथ मैं सहमत नहीं हूं। जिस प्रश्न का आप उल्लेख कर रहे हैं वह जावास्क्रिप्ट में था, जबकि ओपी यहां jQuery में पूछ रहा है। कोई कारण हो सकता है कि कोई जवाब किसी विधि या किसी अन्य तरीके से क्यों चाहेगा। –

उत्तर

61

यह एक प्रयास करें। चूंकि बैकस्पेस को इनपुट तत्वों पर ठीक काम करना चाहिए, लेकिन अगर फोकस एक अनुच्छेद या कुछ है, तो काम नहीं करना चाहिए, क्योंकि यह वहां है जहां पृष्ठ इतिहास में पिछले पृष्ठ पर वापस जाता है।

$('html').on('keydown' , function(event) { 

     if(! $(event.target).is('input')) { 
      console.log(event.which); 
      //event.preventDefault(); 
      if(event.which == 8) { 
      // alert('backspace pressed'); 
      return false; 
     } 
     } 
}); 

झूठी वापसी => दोनों event.preventDefault और event.stopPropagation प्रभावी हैं।

+16

46 (हटाएं) – andufo

+0

के लिए भी जांचें यह काम करता है लेकिन आप इस तरह से मोडल विंडो नहीं दिखा सकते हैं और पिछले पृष्ठ पर वापस जाने से रोक सकते हैं। –

+1

e.preventDefault() और फिर iffy चीज़ को आज़माएं :) –

10

बैकस्पेस कुंजी को फंसाने के लिए नियमित जावास्क्रिप्ट का उपयोग किया जा सकता है। आप event.keyCode विधि का उपयोग कर सकते हैं। कीकोड 8 है, इसलिए कोड कुछ इस तरह दिखेगा:

if (event.keyCode == 8) { 
    // Do stuff... 
} 

आप दोनों [नष्ट] के लिए जाँच करने के लिए (46) चाहते हैं और साथ ही [Backspace] (8) कुंजी का उपयोग करें, निम्न : के रूप में ऊपर एक ही विचार पर कार्य करना

$('html').keyup(function(e){if(e.keyCode == 8)alert('backspace trapped')}) 
3

, लेकिन थोड़ा सामान्यीकरण:

if (event.keyCode == 8 || event.keyCode == 46) { 
    // Do stuff... 
} 
+0

कीप की बजाय कीडाउन के लिए अपवोट। –

3

अधिकांश ब्राउज़रों पर बैकस्पेस के लिए डिफ़ॉल्ट व्यवहार पिछले पृष्ठ पर वापस जाना है। यदि आप नहीं चाहते हैं तो यह व्यवहार आपको यह सुनिश्चित करने की आवश्यकता है कि कॉल preventDefault() पर कॉल करें। हालांकि ओपी के रूप में, यदि आप हमेशा इसे preventDefault() कहते हैं तो आप टेक्स्ट फ़ील्ड में चीजों को हटाना भी असंभव बना देंगे। नीचे दिए गए कोड में this answer से अनुकूलित समाधान है।

इसके अलावा, हार्ड कोड किए गए कीकोड मानों का उपयोग करने के बजाय (कुछ मूल्य आपके ब्राउज़र के आधार पर बदलते हैं, हालांकि मुझे बैकस्पेस या डिलीट के लिए यह सत्य नहीं मिला है), jQuery has keyCode constants पहले ही परिभाषित है। यह आपके कोड को और अधिक पठनीय बनाता है और आपके लिए किसी भी कुंजीकोड असंगतता का ख्याल रखता है।

// Bind keydown event to this function. Replace document with jQuery selector 
// to only bind to that element. 
$(document).keydown(function(e){ 

    // Use jquery's constants rather than an unintuitive magic number. 
    // $.ui.keyCode.DELETE is also available. <- See how constants are better than '46'? 
    if (e.keyCode == $.ui.keyCode.BACKSPACE) { 

     // Filters out events coming from any of the following tags so Backspace 
     // will work when typing text, but not take the page back otherwise. 
     var rx = /INPUT|SELECT|TEXTAREA/i; 
     if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly){ 
      e.preventDefault(); 
     } 

     // Add your code here. 
    } 
}); 
+0

यह ज्यादातर मामलों को संभालता है लेकिन मैं चयन और कुछ इनपुट प्रकार जैसे रेडियो या चेकबॉक्स पर वापस रोकना चाहता हूं, इसलिए मैंने 'SELECT' हटा दिया और' e.target.type' पर एक परीक्षण जोड़ा। अब तक मेरे पास इन इनपुट प्रकार हैं 'var rxt =/radio | बटन | चेकबॉक्स | छवि | रीसेट | सबमिट/i;' रंग भी बाहर निकलने के लिए एक हो सकता है लेकिन यह ब्राउज़र विशिष्ट हो सकता है। – peater

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