Folgendes funktioniert in allen gängigen Browsern für den Text <input>
Elemente. Es sollte nicht für <textarea>
verwendet werden Elemente, da die getInputSelection
-Funktion berücksichtigt Zeilenumbrüche im IE nicht korrekt. Siehe diese Antwort für eine (längere) Funktion, die dies tut.
function getInputSelection(input) {
var start = 0, end = 0;
input.focus();
if ( typeof input.selectionStart == "number" &&
typeof input.selectionEnd == "number") {
start = input.selectionStart;
end = input.selectionEnd;
} else if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
if (range) {
var inputRange = input.createTextRange();
var workingRange = inputRange.duplicate();
var bookmark = range.getBookmark();
inputRange.moveToBookmark(bookmark);
workingRange.setEndPoint("EndToEnd", inputRange);
end = workingRange.text.length;
workingRange.setEndPoint("EndToStart", inputRange);
start = workingRange.text.length;
}
}
return {
start: start,
end: end,
length: end - start
};
}
document.getElementById("aTextBox").onkeydown = function(evt) {
evt = evt || window.event;
var keyCode = evt.keyCode;
var deleteKey = (keyCode == 46), backspaceKey = (keyCode == 8);
var sel, deletedText, val;
if (deleteKey || backspaceKey) {
val = this.value;
sel = getInputSelection(this);
if (sel.length) {
deletedText = val.slice(sel.start, sel.end);
} else {
deletedText = val.charAt(deleteKey ? sel.start : sel.start - 1);
}
alert("About to be deleted: " + deletedText);
}
};
Angenommen, das Eingabefeld hat eine ID 'input'. So können Sie mit dem geringsten Codeaufwand das letzte Zeichen aus dem Eingabefeld herausfinden.
document.getElementById("input").onkeydown = function(evt) {
const t = evt.target;
if (evt.keyCode === 8) { // for backspace key
console.log(t.value[t.selectionStart - 1]);
} else if (evt.keyCode === 46) { // for delete key
console.log(t.value[t.selectionStart]);
}
};
<input id="input" />
Nein, es gibt keine Variable, die das gelöschte Zeichen speichert. Es sei denn, Sie haben einen Verlauf für Undo/Redo, aber es wäre schwierig, die Informationen aus dieser Komponente zu bekommen.
Am einfachsten wäre es, den Inhalt des Eingabefeldes vor und nach dem Drücken der Entf-/Rücktaste zu vergleichen.