将光标位置设置在行的开头

时间:2014-06-19 14:36:27

标签: jquery

我知道他的问题已在网站上得到解答,但我与我使用的当前代码存在冲突。 (在下面找到)

我的文字字段“example.company.com”中有默认值,我将焦点设置为从值中清除example

jQuery(document).ready(function() {

    jQuery.fn.cleardefault = function() {
    return this.focus(function() {
        if( this.value == this.defaultValue ) {
            this.value = ".company.com";
        }
    }).blur(function() {
        if( !this.value.length ) {
            this.value = this.defaultValue;
        }
    });
};
jQuery(".clearit input, .clearit textarea").cleardefault();

});

当用户点击并且example消失时,我还需要将光标设置到行的开头,但我无法做到这一点。我不是jQuery的专家,所以请在这里寻求帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

有两种方法可以将光标设置为input中的特定位置:

  1. setSelectionRange(startPosition, endPosition);:选择两个提供位置之间的文字。如果开始和结束相同,则光标只放在该位置的字符之前。因此,要将光标放在开头,您可以执行setSelectionRange(0, 0);
  2. setCursorPosition(position);:这实际上将光标移动到提供的位置。因此,要将光标放在开头,您可以执行setCursorPosition(0);
  3. 尝试完代码后,似乎在焦点上(特别是通过点击),光标位于点击位置,setSelectionRange和/或setCursorPosition被覆盖。

    一种可能的解决方法是将其包装在计时器中以引发虚假延迟。像这样:

    演示:http://jsfiddle.net/abhitalks/vU5yf/5/

    相关代码

    jQuery.fn.cleardefault = function() {
        return this.focus(function(e) {
            if( this.value == this.defaultValue ) {
                this.value = ".company.com";
                var t = this;
                window.setTimeout(function() {
                    t.setSelectionRange(0, 0);
                    // t.setCursorPosition(0);
                }, 0); 
            }
        }).blur(function(e) {
            if( !this.value.length ) {
                this.value = this.defaultValue;
            }
        });
    };
    
    
    jQuery(".clear").cleardefault();
    

    如果需要,您可以尝试将超时增加一点来调整它。但是,不要太高,否则用户可能会在计时器触发前输入另一个字符。