添加新字符并在输入上设置位置

时间:2014-01-16 15:43:29

标签: javascript jquery input

我需要做以下事情,但目前还没弄明白:

我有<input type="text">我需要在用户输入第一个字符后立即添加“ - ”,并将光标放在长度上的下一个位置,(第3个)位置)所以用户可以继续输入

例如:

“G-&lt; ---添加这个” - 用jQuery签名并在其后面设置光标。

由于

修改

这是我目前的代码。

$('#document').keypress(function(e){
    if(this.value.length == 1){     
               $(this).val($(this).val() + '-');
            }
});

它会在用户输入后添加“ - ”符号。

我想在用户输入第一个字符后立即将“ - ”字符添加到字符串中。到目前为止,如果我键入“H”,我得到“-H”,我想要“H - ”。

6 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您需要在输入字段中添加事件处理程序。 在该处理程序中,您可以在用户输入第一个字母后添加-。 请注意,您必须使用jQuery才能工作。

$(document).ready(function(){
    $('#id-of-input').keyup(function(){
        if($(this).length == 1) $(this).val($(this).val() + "-"));
    });
}

答案 2 :(得分:0)

看看这个Jquery脚本:

meioMask

meioMask - GitHub

答案 3 :(得分:0)

http://jsfiddle.net/Jn4vV/6/

$( "input" ).keyup(function(e) {
    if( $(this).val().length == 1  && (e.keyCode != 8) &&  (e.keyCode != 46))
        $(this).val($(this).val() + '-');    
});

编辑:更新了我处理退格键和删除键的答案

答案 4 :(得分:0)

试试这个: 您还需要检查密钥是否退回。如果它是退格,那么你应该跳过这个事件。

现场演示:http://jsfiddle.net/5Y9mG/32/

$( document ).ready(function() {
    $("#my-input").keypress(function(e){
       if(e.keyCode != 8){ //check for backspace press
        var text = this.value;
        if(text.length ==1){
           this.value=text+'-'; 
         }
        }
     });
});

更新:
 如果用户输入' - '并且输入字段有多个' - '字符,那么在他删除这个' - '之前它不允许用户输入其他字符
http://jsfiddle.net/5Y9mG/42/

$( document ).ready(function() {
    $("#my-input").keypress(function(e){
      if(e.keyCode != 8 && e.keyCode !=46) {
         var text = this.value;
        if(text.split("-").length > 2){ // check for double -
            alert("already exixts");
            return false;
         }       
        if(text.length ==1){
           this.value=text+'-'; 
         }
        }
     });
});

答案 5 :(得分:0)

好的,这是我的看法。 :)

<强> HTML

<input type="text" id="addDashField" />

<强> JS

$(document).ready(function() {
    $("#addDashField").on("keyup", function() {
        checkFormat($(this));
    });
    $("#addDashField").on("paste cut", function() {
        var $inputField = $(this);

        setTimeout(function() {
            checkFormat($inputField);
        }, 0);
    });

    function checkFormat($inputField) {
        var currVal = $inputField.val();
        var regexFormatPattern1 = /^(.)$/;
        var regexFormatPattern2 = /^(.)([^\-])/;

        if (regexFormatPattern1.test(currVal)) {
            $inputField.val(currVal.replace(regexFormatPattern1, "$1-"));
        }
        else if (regexFormatPattern2.test(currVal)) {
            $inputField.val(currVal.replace(regexFormatPattern2, "$1-$2"));
        }
    }
});

一些关键点:

  • 处理击键或粘贴(Ctrl-v或菜单选择)
  • 处理deletebackspace次击键
  • 处理在较长字符串中间插入“ - ”字符(例如,用户输入5个字符,然后返回并删除插入的“ - ”)

注意#1:有两种正则表达式模式,因为.replace方法处理需要根据输入的长度获得正确数量的捕获组。

注意#2: pastecut事件需要延迟才能处理基于菜单的粘贴(有时可能会在文本输入/删除之前触发该领域)。


更新:如果不需要“剪切/粘贴”功能,您可以简单地省略该事件绑定。