我想在按backspace
或canc
时阻止用户删除文本框中的任何“/”字符。
例如:
如果文本框值为2014/09/
,并且用户按退格键,则不会删除“/”字符。
如何在keyup
或keydown
evenets中执行此操作?
$("#textboxId").keyup(function(){
// any idea
});
答案 0 :(得分:2)
您有三种情况:
backspace
并删除光标前的字符canc
并删除光标backspace
或canc
并删除所选文字所以你必须解决所有这些不同的情况。
此代码可以使用:
$('#textareaId')[0].addEventListener("keydown", function(e) {
var start = this.selectionStart,
end = this.selectionEnd,
value = this.value,
key = e.keyCode;
if (key == 8 && value[start-1] == '/') e.preventDefault();
if (key == 46 && value[start] == '/') e.preventDefault();
if ((key == 8 || key == 46) && value.substring(start, end).indexOf('/') != -1) e.preventDefault();
}, false);
答案 1 :(得分:0)
我已经使用字符串操作
完成了它在这里查看我的小提琴http://jsfiddle.net/7ek11cfs/21/
$('textarea').keydown(function(e) {
textValue = $(this).val();
});
$('textarea').keyup(function(e) {
if(textValue.charAt(textValue.length-1)=='/')
{
$('textarea').val(textValue);
}
});
希望这有帮助
答案 2 :(得分:0)
这里你去=>的 DEMO 强>
(function ($, undefined) {
$.fn.getCursorPosition = function() {
var el = $(this).get(0);
var pos = 0;
if('selectionStart' in el) {
pos = el.selectionStart;
} else if('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
}
})(jQuery);
$("#textboxId").keydown(function(e){
var currentPos=$(this).getCursorPosition();
var lastChar=$(this).val().substr((currentPos- $(this).val().length)- 1);
if(e.which==8 && lastChar.match(/^\//g) ){
e.preventDefault();
return false;
}
});
我从THIS ANSWER获得了一些帮助,以确定游标的当前位置。
请注意,与所有其他答案和想法相反,这实际上会像面具一样工作,即使光标位于文本中间也不会被删除!