回答
下面將在所有主要瀏覽器的工作文字<input>
內容,見jsFiddle。它不應該用於<textarea>
元素,因爲getInputSelection
函數不會在IE中正確計算換行符。請參閱this answer瞭解將執行此操作的(更長)功能。
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);
}
};
我得到錯誤在input.createTextRange。對象不支持這個屬性或方法。 – 2016-09-08 12:48:44
@dIvYaNsHsInGh:這意味着你傳入的對象不是input/textarea元素。 – 2016-09-08 15:27:11
不,沒有變量存儲刪除的字符。除非您有撤銷/重做歷史記錄,但是很難從該組件中獲取信息。
最簡單的方法是比較輸入字段在刪除/退格鍵被按下之前和之後的內容。
你可以嘗試一些與插入位置:
function getCaretPosition(control){
var position = {};
if (control.selectionStart && control.selectionEnd){
position.start = control.selectionStart;
position.end = control.selectionEnd;
} else {
var range = document.selection.createRange();
position.start = (range.offsetLeft - 1)/7;
position.end = position.start + (range.text.length);
}
position.length = position.end - position.start;
return position;
}
document.getElementById('test').onkeydown = function(e){
var selection = getCaretPosition(this);
var val = this.value;
if((e.keyCode==8 || e.keyCode==46) && selection.start!==selection.end){
alert(val.substr(selection.start, selection.length));
} else if(e.keyCode==8){
alert(val.substr(selection.start-1, 1));
} else if(e.keyCode==46){
alert(val.substr(selection.start, 1));
}
}
測試在Chrome 6的一個例子
小心解釋'(range.offsetLeft - 1)/ 7;'? – 2010-07-06 10:23:09
Err,我不知道,我在谷歌上搜索了一個插入符號位置函數 – Harmen 2010-07-06 10:27:48
插入符號位置函數是狡猾的。不僅僅是那條線,其目的超出了我,而是用於'control.selectionStart && control.selectionEnd'的測試:如果它們都是0,這將返回false,這是不好的,並且會在非IE瀏覽器中導致錯誤。 – 2010-07-06 10:45:44
- 1. 刪除輸入字段中的文字
- 2. 輸入字段被清空後如何刪除輸入字段
- 3. 從輸入字段中刪除空白
- 4. 從表單輸入字段中刪除「$」
- 5. 從輸入字段中刪除文本
- 6. 從輸入字段中刪除樣式
- 7. 從輸入字段中刪除文件
- 8. 刪除輸入字段jQuery的內容
- 9. 刪除輸入字段的驗證
- 10. jQuery的刪除表單輸入字段
- 11. 從序列化字符串中刪除空字段/輸入
- 12. 帶有Ajax onkeypress的輸入字段導致輸入被刪除
- 13. 在輸入字段中輸入字符時自動建議?
- 14. 動態刪除輸入字段
- 15. 刪除輸入字段與跨度
- 16. 添加/刪除多個輸入字段
- 17. 添加/刪除輸入字段
- 18. 刪除輸入字段更新
- 19. 如何刪除輸入字段佈局
- 20. 刪除輸入字段值onclick
- 21. 與值輸入字段刪除
- 22. 「輸入參數值」框刪除字段
- 23. 刪除添加輸入字段
- 24. 如果輸入字段無效,則清除輸入字段
- 25. 清除輸入字段onfocus
- 26. 批量刪除「輸入」字符?
- 27. 從PHP輸入字符串中刪除特定的字符串
- 28. 在url輸入中輸入'/'字符
- 29. 在刪除輸入字段時更新佔位符標記
- 30. 輸入字段
您需要檢查*字符*對正則表達式嗎? – mkluwe 2010-07-06 09:54:04
您可以附加* keyup *處理程序,並等待退格字符,防止默認操作,自行移除,但在此之前您知道最後一個字符是什麼,以便您可以執行正則表達式。 – galambalazs 2010-07-06 10:19:45