[英]Need to only allow certain characters to be entered OR deleted
我有一個文本框。 我希望用戶能夠輸入的唯一內容是括號。 它們還應該只能刪除括號。 我在這樣做上有很多麻煩。
現在我有一個這樣的功能:
'#myTextArea input': function (el, ev) {
}
我使用了輸入,以便可以處理人員粘貼。
我不確定如何從中找到鍵入的字符。 我尤其不知道如何確保僅刪除括號。 有人知道這樣做的好方法嗎?
編輯為了澄清起見,文本框中已經填充了文本。 用戶應該只能夠向已經存在的文本添加和刪除括號。
EDIT2
我成功了,所以用戶只能輸入括號。 這不考慮粘貼,也不處理刪除。 還是不知道該怎么做.....
'#myTextArea keydown': function (el, ev) {
if ((ev.keyCode != 48 && ev.keyCode != 57) || ev.shiftKey == false){
return false;
}
}
一種可能的解決方案是在按鍵事件中以編程方式執行此操作。 我僅顯示插入時的情況(通過按鍵或粘貼)。
通常,無論是按下字符鍵還是Ctrl-V,都會在字符串中插入一個子字符串。 插入符號的位置將在該子字符串的末尾。
我的算法發現該子字符串是兩個位置之間的字符串:
然后,它使用函數filterString過濾字符串,該函數將用“”替換所有非括號符號
最后將輸入值更新為最長公共前綴+過濾后的字符串+插入號后的文本
您需要使用此jquery插件來進行插入符號操作: http : //jcaret.googlecode.com/
<input id="myTextArea" value="a*(b*(c+d))">
</input>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://jcaret.googlecode.com/files/jquery.caret.1.02.min.js"></script>
<script type="text/javascript">
var old_value = $('#myTextArea').val();
function filterString(a) {
return a.replace(/[^\(\)]/g,"");
}
$('#myTextArea').keyup(function(){
var end_of_insertion = $(this).caret().start;
var new_value = $(this).val();
var i=0;
while(i<old_value.length && i<new_value.length && old_value[i]==new_value[i]) {
i++;
}
if(i>=end_of_insertion)return;
// i now points to first different character in strings old_value and new_value
new_value = new_value.substr(0,i)
+ filterString(new_value.substr(i,end_of_insertion-i))
+ new_value.substr(end_of_insertion);
$('#myTextArea').val(new_value).caret({start: end_of_insertion, end: end_of_insertion});
old_value = new_value;
});
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.