使用jQuery按下删除键时如何跳过字符串中的字符

时间:2010-11-26 04:44:40

标签: javascript jquery

如何使用 jQuery 从字符串中删除特定字符时禁用删除按键或退格键。例如,当光标处于hypen时,从字符串1234-555,如果按下删除键,则不应删除hypen。而不是光标应该保持在相同的位置。基本上在连字符处禁用删除键。以同样的方式当光标在hypen之后时,如果按下退格键,它不应该删除hypen。而不是光标应该保持在相同的位置。

1 个答案:

答案 0 :(得分:1)

当然,请使用keydown事件。

编辑:要在文本框中获取光标的当前位置,您需要使用以下功能(由@CMS提供不少):

function getCaret(el) { 
  if (el.selectionStart) { 
    return el.selectionStart; 
  } else if (document.selection) { 
    el.focus(); 

    var r = document.selection.createRange(); 
    if (r == null) { 
      return 0; 
    } 

    var re = el.createTextRange(), 
        rc = re.duplicate(); 
    re.moveToBookmark(r.getBookmark()); 
    rc.setEndPoint('EndToStart', re); 

    return rc.text.length; 
  }  
  return 0; 
}

现在,回到我原来的答案:

var nobackspace = ['-'];
$(element).keydown(function(e) {
   if(e.keyCode == 8) {//backspace key was pressed
    var pos = getCaret(this);

    if(pos > 0) pos--;  //just a precaution so we don't get a negative number

    if(!jQuery.inArray($(this).val().charAt(pos), nobackspace)) return false;
   }
});

jsFiddle example