我知道他的问题已在网站上得到解答,但我与我使用的当前代码存在冲突。 (在下面找到)
我的文字字段“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的专家,所以请在这里寻求帮助。
谢谢!
答案 0 :(得分:1)
有两种方法可以将光标设置为input
中的特定位置:
setSelectionRange(startPosition, endPosition);
:选择两个提供位置之间的文字。如果开始和结束相同,则光标只放在该位置的字符之前。因此,要将光标放在开头,您可以执行setSelectionRange(0, 0);
。setCursorPosition(position);
:这实际上将光标移动到提供的位置。因此,要将光标放在开头,您可以执行setCursorPosition(0);
。尝试完代码后,似乎在焦点上(特别是通过点击),光标位于点击位置,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();
如果需要,您可以尝试将超时增加一点来调整它。但是,不要太高,否则用户可能会在计时器触发前输入另一个字符。