Answers:
为了避免用户每次尝试使用鼠标移动插入符号时都被选中的整个文本感到烦恼,您应该使用focus
事件而不是click
事件来执行此操作。以下将完成工作并解决Chrome中导致最简单版本(即仅select()
在focus
事件处理程序中调用textarea 方法)无法正常工作的问题。
jsFiddle:http : //jsfiddle.net/NM62A/
码:
<textarea id="foo">Some text</textarea>
<script type="text/javascript">
var textBox = document.getElementById("foo");
textBox.onfocus = function() {
textBox.select();
// Work around Chrome's little problem
textBox.onmouseup = function() {
// Prevent further mouseup intervention
textBox.onmouseup = null;
return false;
};
};
</script>
jQuery版本:
$("#foo").focus(function() {
var $this = $(this);
$this.select();
// Work around Chrome's little problem
$this.mouseup(function() {
// Prevent further mouseup intervention
$this.unbind("mouseup");
return false;
});
});
tab
进入textarea ,则失败-您的其他解决方案在两种情况下都可以使用:)
$("#foo").mouseup(function() {
$("#foo").unbind("mouseup");
return false;
});
您需要引用文本框,而不必使用this
仅以完整路径引用它..并且它将起作用..
更好的方法,解决制表符和Chrome问题以及新的jQuery方法
$("#element").on("focus keyup", function(e){
var keycode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
if(keycode === 9 || !keycode){
// Hacemos select
var $this = $(this);
$this.select();
// Para Chrome's que da problema
$this.on("mouseup", function() {
// Unbindeamos el mouseup
$this.off("mouseup");
return false;
});
}
});
我最终使用了这个:
$('.selectAll').toggle(function() {
$(this).select();
}, function() {
$(this).unselect();
});
readonly
属性使其变为只读。
jQuery版本略短:
$('your-element').focus(function(e) {
e.target.select();
jQuery(e.target).one('mouseup', function(e) {
e.preventDefault();
});
});
它可以正确处理Chrome角壳。有关示例,请参见http://jsfiddle.net/Ztyx/XMkwm/。