2012-12-14 68 views
2

我有一個文本框。我希望用戶能夠輸入的唯一東西是括號。他們也應該只能刪除括號。儘管如此,我還是遇到了很多麻煩。只需要允許輸入或刪除某些字符

現在我有這樣的功能:

 '#myTextArea input': function (el, ev) { 

     } 

我用輸入,所以它會處理人際關係粘貼。

我不知道如何找到從此鍵入的字符。我尤其不知道如何確保只有一個括號被刪除。任何人都知道這樣做的好方法?

編輯 爲了澄清,文本框已經填充了文本。用戶應該可以在已經存在的文本中添加和刪除括號。

EDIT2

我得到它的工作,使用戶可以只輸入括號。這不考慮粘貼,並且不涉及刪除。仍然不知道該怎麼做.....

 '#myTextArea keydown': function (el, ev) { 
      if ((ev.keyCode != 48 && ev.keyCode != 57) || ev.shiftKey == false){ 
       return false; 
      } 
     } 
+0

您使用的骨幹或任何其他框架? – David

+0

只有被使用的東西是JQuery和JavascriptMVC。 – user1652427

+1

如果他們只能輸入括號,他們如何刪除括號以外的任何內容? – thatidiotguy

回答

1

一個可能的解決方案是在keyup事件中以編程方式執行它。插入時(通過按鍵或粘貼),僅顯示情況。

無論是字符鍵還是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>