जवाबों:
कुंजी दबाने घटना केवल चरित्र शुरू होता है (प्रिंट करने योग्य) चाबियाँ, KeyDown घटना सभी तरह के रूप में अमुद्रणीय सहित के लिए उठाया है Control, Shift, Alt,BackSpace , आदि
अपडेट करें:
जब एक कुंजी को दबाया जाता है तो कीपर घटना को निकाल दिया जाता है और यह कुंजी सामान्य रूप से एक चरित्र मान उत्पन्न करती है
संदर्भ ।
keydown
इसके बजाय प्रयास करें keypress
।
कीबोर्ड की घटनाओं इस क्रम में होते हैं: keydown
, keyup
,keypress
बैकस्पेस के साथ समस्या शायद यह है कि ब्राउज़र वापस नेविगेट करेगा keyup
और इस प्रकार आपका पेज keypress
ईवेंट नहीं देख पाएगा ।
keydown
keypress
keyup
। unixpapa.com/js/testkey.html
keyup
ईवेंट को निकाल नहीं दिया जाता है।
keydown
घटना को आग लगाती है लेकिन कुछ समय बाद तक इनपुट से चरित्र को हटाया नहीं जाता है।
keypress
घटना ब्राउज़रों में अलग हो सकता है।
मैंने क्रोम और फ़ायरफ़ॉक्स पर कीबोर्ड की घटनाओं (JQuery के शॉर्टकट का उपयोग करके) की तुलना करने के लिए एक Jsfiddle बनाया । ब्राउज़र के आधार पर आप जिस keypress
इवेंट का उपयोग कर रहे हैं, वह ट्रिगर होगा या नहीं - बैकस्पेस keydown/keypress/keyup
फ़ायरफ़ॉक्स पर केवल keydown/keyup
क्रोम पर ट्रिगर होगा ।
क्रोम पर
keydown/keypress/keyup
जब ब्राउज़र एक कीबोर्ड इनपुट पंजीकृत करता है ( keypress
निकाल दिया जाता है)
keydown/keyup
यदि कोई कीबोर्ड इनपुट नहीं है (Alt, Shift, backspace, arrow कुंजियों के साथ परीक्षण किया गया है)
keydown
केवल टैब के लिए?
फ़ायरफ़ॉक्स पर
keydown/keypress/keyup
जब ब्राउज़र एक कीबोर्ड इनपुट पंजीकृत करता है, लेकिन बैकस्पेस, एरो कीज़, टैब के लिए भी (तो यहाँ keypress
भी बिना इनपुट के ही निकाल दिया जाता है)
keydown/keyup
कुल मिलाकर, बदलाव
यह आश्चर्यजनक नहीं होना चाहिए क्योंकि https://api.jquery.com/keypress/ के अनुसार :
नोट: जैसा कि कीपर ईवेंट किसी आधिकारिक विनिर्देश द्वारा कवर नहीं किया गया है, इसका उपयोग करते समय सामना किया गया वास्तविक व्यवहार ब्राउज़रों, ब्राउज़र संस्करणों और प्लेटफार्मों में भिन्न हो सकता है।
कीप ईवेंट प्रकार का उपयोग W3C ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress ) द्वारा किया गया है
कीपर ईवेंट प्रकार को संदर्भ और पूर्णता के लिए इस विनिर्देश में परिभाषित किया गया है, लेकिन यह विनिर्देश इस ईवेंट प्रकार के उपयोग को दर्शाता है। जब संदर्भों के संपादन में, लेखक इसके बजाय पूर्वप्रकाशित घटना की सदस्यता ले सकते हैं।
अंत में, अपने सवाल का जवाब देने के लिए, आप का उपयोग करना चाहिए keyup
या keydown
फ़ायरफ़ॉक्स और क्रोम के पार एक बैकस्पेस पता लगाने के लिए।
इसे यहाँ पर आज़माएँ:
$(".inputTxt").bind("keypress keyup keydown", function (event) {
var evtType = event.type;
var eWhich = event.which;
var echarCode = event.charCode;
var ekeyCode = event.keyCode;
switch (evtType) {
case 'keypress':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
case 'keyup':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<p>");
break;
case 'keydown':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
default:
break;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="inputTxt" type="text" />
<div id="log"></div>
मैंने जो कुछ लिखा है वह किसी को भी एक मुद्दे पर आता है जिसमें लोगों को बैकस्पेस मारते हुए लगता है कि वे एक फॉर्म फील्ड में हैं
window.addEventListener("keydown", function(e){
/*
* keyCode: 8
* keyIdentifier: "U+0008"
*/
if(e.keyCode === 8 && document.activeElement !== 'text') {
e.preventDefault();
alert('Prevent page from going back');
}
});
मेरा संख्यात्मक नियंत्रण:
function CheckNumeric(event) {
var _key = (window.Event) ? event.which : event.keyCode;
if (_key > 95 && _key < 106) {
return true;
}
else if (_key > 47 && _key < 58) {
return true;
}
else {
return false;
}
}
<input type="text" onkeydown="return CheckNumerick(event);" />
कोशिश करो
बैकस्पेस कुंजी कोड 8 है
हाल ही में और अधिक क्लीनर: का उपयोग करें event.key
। कोई और अधिक मनमानी संख्या कोड!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
वर्तमान में डॉक्स द्वारा अनुशंसित विकल्प है। इसके अलावा, यह किसी भी दिए गए कुंजी के लिए विभिन्न मैपिंग के साथ विभिन्न अंतरराष्ट्रीय कीबोर्ड का समर्थन करता है। वे इस अर्थ में मनमानी नहीं कर रहे हैं कि वे निश्चित हैं, लेकिन वे कोड पढ़ते समय हैं
इसके बजाय कीअप / कीडड / प्रिन्टपुट घटनाओं में से एक का उपयोग करें।
इस संदर्भ के आधार पर , कुंजी को पदावनत किया जाता है और अब अनुशंसित नहीं किया जाता है।
जब एक चरित्र मान उत्पन्न करने वाली कुंजी को दबाया जाता है, तो कीपर घटना को निकाल दिया जाता है। वर्ण मान उत्पन्न करने वाली कुंजियों के उदाहरण वर्णनात्मक, संख्यात्मक और विराम चिह्न कुंजियाँ हैं। उन चरित्रों के उदाहरण जो चरित्र मान उत्पन्न नहीं करते हैं, जैसे कि Alt, Shift, Ctrl, या Meta जैसे संशोधक कुंजियाँ हैं।
यदि आप "पहले" का उपयोग करते हैं तो इसके बारे में सावधान रहें यह ब्राउज़र संगतता है । "प्रीफिनप्यूट" और अन्य दो के बीच का अंतर यह है कि "पहलेइनपुट" को निकाल दिया जाता है जब इनपुट मूल्य को बदलने के बारे में होता है, इसलिए उन वर्णों के साथ जो इनपुट मूल्य को बदल नहीं सकते हैं, यह निकाल नहीं दिया जाता है (जैसे शिफ्ट, ctr, alt)।
मुझे एक ही समस्या थी और कीप का उपयोग करके इसे हल किया गया था।
keypress
कई ब्राउज़रों में आग लगाती हैं। देखें unixpapa.com/js/key.html