2014-09-05 105 views
2

我想要防止用戶在按backspacecanc時刪除文本框中的任何「/」字符。防止刪除文本框中的特殊字符

例如:

如果文本框的值是2014/09/,並且用戶按下退格時,「/」字符將不被刪除。

我該怎麼做keyup或​​evenets?

$("#textboxId").keyup(function(){ 

    // any idea 

}); 
+0

你不想刪除'/'? – Khaleel 2014-09-05 10:25:17

+2

我建議你使用[MASKED INPUT插件](http://digitalbush.com/projects/masked-input-plugin/)我認爲這就是你需要的 – Satpal 2014-09-05 10:26:10

+0

@Khaleel是我不想刪除/ – 2014-09-05 10:27:34

回答

3

你有三種情況:

  1. 的用戶按下backspace並刪除光標之前的字符
  2. 用戶按下canc
  3. 用戶選擇的文本並按下backspacecanc並刪除選定的文本

所以,你必須將光標後刪除字符解決所有這些不同的情況。

此代碼將工作:

$('#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); 

工作例:http://jsfiddle.net/MeBeiM/7hdb3472/1

+0

不起作用,刪除'/' – 2014-09-05 11:27:23

+0

@AminJafari我沒有選擇jQuery庫,對不起。現在它工作正常。 – 2014-09-05 11:30:40

+0

是的,它工作,完美! +1 – 2014-09-05 11:31:41

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); 
} 
}); 

希望這有助於

+0

此解決方案不起作用... – 2014-09-05 11:22:09

+0

@MarcoBonelli預計作爲解決方案是在這方面的工作。你如何聲稱它不起作用? – Khaleel 2014-09-05 12:30:13

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用於識別光標當前位置的功能。

請注意,在反對所有其他答案和想法發現時,這將實際上像面具一樣工作,即使光標位於文本中間也不會被刪除!

+0

你正在使它成爲一個非常複雜的實際mooooore。 – 2014-09-05 11:23:02

+0

@MarcoBonelli是的,因爲我希望它在任何情況下都可以正常工作 – 2014-09-05 11:24:44

+0

如果您將脫字符號放在開頭並使用CANC鍵,它將刪除所有文本... – 2014-09-05 11:32:00