2014-09-05 3 views
2

Я хочу, чтобы пользователь не удалял символ «/» в текстовом поле при нажатии backspace или canc.Предотвращение удаления специального символа в текстовом поле

Например:

Если значение текстового поля является 2014/09/, и пользователь нажимает клавишу Backspace, то символ «/» не будет удален.

Как это сделать в методах keyup или keydown?

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

    // any idea 

}); 
+0

Вы не хотите удалять '/'? – Khaleel

+2

Я предлагаю вам использовать [MASKED INPUT PLUGIN] (http://digitalbush.com/projects/masked-input-plugin/) Я думаю, что вам нужно – Satpal

+0

@Khaleel да, я не хочу удалить/ –

ответ

3

У вас есть три ситуации:

  1. The прессы пользователя backspace и удаляет символ перед курсором
  2. Пользователь нажимает canc и удаляет символ после курсора
  3. Пользователь выбирает текст и нажимает 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); 

РАБОЧИЙ ПРИМЕР: http://jsfiddle.net/MeBeiM/7hdb3472/1

+0

не работает, удаляет '/' –

+0

@AminJafari. Я не выбрал библиотеку jQuery, извините. Теперь он отлично работает. –

+0

Да, это работает, отлично! +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); 
} 
}); 

Надеется, что это помогает

+0

Это решение не работает ... –

+0

@MarcoBonelli, который ожидается как решение работает в этом. как вы утверждаете, что это не работает? – Khaleel

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 сложнее, чем оно есть на самом деле. –

+0

@MarcoBonelli да, потому что я хочу, чтобы он работал во всех ситуациях без исключения –

+0

Если вы поместите каретку в начале и используете ключ CANC, он удалит весь текст ... –

Смежные вопросы