"इनपुट" ईवेंट पर बैकस्पेस और डेल का पता लगाएं?


93

उसको कैसे करे?

मैंने कोशिश की:

var key = event.which || event.keyCode || event.charCode;

if(key == 8) alert('backspace');

लेकिन यह काम नहीं करता है ...

यदि मैं कीपर ईवेंट पर भी ऐसा करता हूं तो यह काम करता है, लेकिन मैं कीपर का उपयोग नहीं करना चाहता हूं क्योंकि यह मेरे इनपुट क्षेत्र में टाइप किए गए चरित्र को आउटपुट करता है। मुझे इसे नियंत्रित करने में सक्षम होने की आवश्यकता है


मेरा कोड:

  $('#content').bind('input', function(event){

    var text = $(this).val(),
        key = event.which || event.keyCode || event.charCode;

    if(key == 8){
      // here I want to ignore backspace and del
    }

    // here I'm doing my stuff
    var new_text = 'bla bla'+text;
    $(this).val(new_text);
  });

मेरे इनपुट में किसी भी वर्ण को जोड़ा नहीं जाना चाहिए, इसके अलावा मैं जो कुछ वैल के साथ जोड़ रहा हूं () वास्तव में उपयोगकर्ता के इनपुट को पूरी तरह से अनदेखा किया जाना चाहिए, केवल कुंजी दबाने की कार्रवाई मेरे लिए महत्वपूर्ण है


3
आपको वास्तव में or'ing - event.which करने की आवश्यकता नहीं है, jQuery आपके लिए ईवेंट ऑब्जेक्ट को सामान्य करता है। देखें api.jquery.com/category/events/event-object
निको

आप इवेंट के नाम को पहले तर्क के रूप में रखना चाहते हैं .bind, चयनकर्ता को नहीं। होना चाहिए$('content').bind('keypress', ...
pmrotule

जवाबों:


119

.onkeydownहटाने के साथ प्रयोग करें और रद्द करें return false;। ऐशे ही:

var input = document.getElementById('myInput');

input.onkeydown = function() {
    var key = event.keyCode || event.charCode;

    if( key == 8 || key == 46 )
        return false;
};

या jQuery के साथ, क्योंकि आपने अपने प्रश्न में एक jQuery टैग जोड़ा है:

jQuery(function($) {
  var input = $('#myInput');
  input.on('keydown', function() {
    var key = event.keyCode || event.charCode;

    if( key == 8 || key == 46 )
        return false;
  });
});


19
यदि आप राइट-क्लिक> पेस्ट से इनपुट पकड़ना चाहते हैं तो क्या होगा?
सीटीबी

6
keydownक्रोम एंड्रॉइड में काम नहीं करता है, बैकस्पेस या डेल पर क्लिक करने पर यह खालीपन लौट आता है
कोरटिका

2
फ़ंक्शन में हमें ईवेंट को पैरामीटर के रूप में रखना होता है, तभी यह फ़ंक्शन (ईवेंट) -------------------------- var input = डॉक्यूमेंट की तरह काम करेगा। getElementById ( 'myInput'); input.onkeydown = function (event) {var key = event.keyCode || event.charCode; अगर (कुंजी == 8 || कुंजी == 46) गलत है? };
अनुराग_BEHS

1
jQuery के साथ यह आंतरिक रूप से फ़िल्टर करता है enterऔर ईवेंट backspaceपर कुंजियाँ inputबनाता है, और ये कुंजी प्रेस तक नहीं पहुँचती हैं
vsync

@ राउटर - ऐसा नहीं है कि यह एक बड़ी बात है, लेकिन मुझे लगता है कि jquery के लिए कोड में एक टाइपो है। मुझे लगता है कि आप ऑन-कीडाउन ईवेंट हैंडलर के पैरामीटर नाम "इवेंट" को जोड़ना चाहते हैं।
रोबोबियर

14

JQuery के साथ

Event.which संपत्ति event.keyCode और event.charCode को सामान्य। यह कीबोर्ड की इनपुट के लिए event.which देखने के लिए अनुशंसित है।

http://api.jquery.com/event.which/

jQuery('#input').on('keydown', function(e) {
    if( e.which == 8 || e.which == 46 ) return false;
});

2
मैं लंबे समय से jQuery का उपयोग कर रहा हूं, लेकिन यह नहीं देखा है। हमेशा कुछ नया सीखने के लिए अच्छा है। +1!
सेबलफॉस्ट

9

Event.key === "बैकस्पेस"

हाल ही में और अधिक क्लीनर: का उपयोग करें event.key। कोई और अधिक मनमानी संख्या कोड!

input.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Backspace" || key === "Delete") {
        return false;
    }
});

मोज़िला डॉक्स

ब्राउज़रों का समर्थन किया


कभी-कभी event.key रिटर्न "प्रक्रिया" एक कारण से मैं समझ नहीं पा रहा हूं ...
ऑस्कर चेम्बर्स

यह एक समर्थित ब्राउज़र है। आपके पास एक बग हो सकता है, या शायद आपका कस्टम कीबोर्ड
कीडाउन

3

क्या आपने 'onkeydown' का उपयोग करने की कोशिश की है? यह वह घटना है जिसकी आप तलाश कर रहे हैं।

यह इनपुट डालने से पहले संचालित होता है और आपको चार इनपुट रद्द करने की अनुमति देता है।


लेकिन मैं इसे कैसे रद्द करूं? क्योंकि मैं इनपुट पर वैल () का उपयोग कर रहा हूं और यह अभी भी टाइप किए गए चरित्र को जोड़ता है
एलेक्स

3
कैसे के बारे में event.preventDefault()?
निको

आप बस return false;jQuery का उपयोग करते समय किसी भी घटना को रद्द कर सकते हैं ।
iMoses 13

3

यह एक पुराना सवाल है, लेकिन अगर आप इनपुट पर बैकस्पेस इवेंट को पकड़ना चाहते हैं, और कीडडाउन, की-वर्ड या की-अप नहीं है - जैसा कि मैंने देखा है कि इनमें से किसी भी एक कार्य को मैंने लिखा है और स्वचालित टेक्स्ट फ़ॉर्मेटिंग के साथ अजीब देरी का कारण बनता है। -आप इनपुट का उपयोग कर एक बैकस्पेस को पकड़ सकते हैं

document.getElementsByTagName('input')[0].addEventListener('input', function(e) {
    if (e.inputType == "deleteContentBackward") {
        // your code here
    }
});

3

keydown साथ में event.key === "Backspace" or "Delete"

हाल ही में और अधिक क्लीनर: का उपयोग करें event.key। कोई और अधिक मनमानी संख्या कोड!

input.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Backspace" || key === "Delete") {
        return false;
    }
});

आधुनिक शैली:

input.addEventListener('keydown', ({key}) => {
    if (["Backspace", "Delete"].includes(key)) {
        return false
    }
})

मोज़िला डॉक्स

ब्राउज़रों का समर्थन किया


2
$('div[contenteditable]').keydown(function(e) {
// trap the return key being pressed
if (e.keyCode === 13 || e.keyCode === 8)
{
    return false;
}
});

1
"बैकस्पेस" के लिए कुंजी कोड 8
फणीकुमार जाटवल्लभूला

सवाल बैकस्पेस और डिलीट का है, बैकस्पेस और एंटर का नहीं।
पॉल

0
//Here's one example, not sure what your application is but here is a relevant and likely application 
function addDashesOnKeyUp()
{
    var tb = document.getElementById("tb1"); 
    var key = event.which || event.keyCode || event.charCode;

    if((tb.value.length ==3 || tb.value.length ==7 )&& (key !=8) ) 
    {
        tb.value += "-"
    } 
}

0

क्रोम का उपयोग करने वाले Android उपकरणों पर हम एक बैकस्पेस का पता नहीं लगा सकते हैं। आप इसके लिए वर्कअराउंड का उपयोग कर सकते हैं:

var oldInput = '',
    newInput = '';

 $("#ID").keyup(function () {
  newInput = $('#ID').val();
   if(newInput.length < oldInput.length){
      //backspace pressed
   }
   oldInput = newInput;
 })

मैं वास्तव में इसका उत्तर नहीं चाहता, लेकिन ऐसा लगता है, क्योंकि वे सेट करते हैं whichऔर keyCode229 पर आते हैं। एक बेहतर तरीका, या एक बेहतर तरीका जल्द ही आना चाहिए, लेकिन मैं मूल रूप से अब इसके लिए उपयोग करूंगा। ..
जॉनीफून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.