将光标放在javascript中的文本框末尾

时间:2012-08-08 08:43:37

标签: javascript html

我有一个文本框,当我对焦时,我希望光标转到文本框的末尾。

不断出现的解决方案只是

this.value = this.value

我用一个简单的方法尝试了这个:

function InputClicked(element) {
    element.className = "inputfocused";
    element.value = element.value;
}

但奇怪的是,这似乎是转到结尾,然后跳到文本框的开头。

3 个答案:

答案 0 :(得分:10)

您必须关注元素并设置插入位置

JSFiddle向您展示了它的工作原理。在这个例子中,jQuery已被用于简化,但如果需要,可以完全省略它。无论如何,setSelectionRange函数是一个DOM函数。

一般来说,它会这样做:

input.focus();
input.setSelectionRange(inputValueLength, inputValueLength);

可以使用DOM功能或使用库函数(如jQuery中)获取输入及其值长度。

我们需要输入值长度吗?

我没有在其他浏览器中测试过,但是在Chrome中运行它可以设置比实际位置更大的位置,并且插入符号将位于最后。如下所示:

input.setSelectionRange(1000,1000);

将按预期工作(假设您的文字短于1000个字符。:)

  

注意 :IE8及更早版本不支持此功能。最常用的浏览器的所有最新版本都支持它。对于旧版本的IE,请使用文本范围。

答案 1 :(得分:5)

您需要使用输入的selectionStartselectionEnd属性或setSelectionRange()方法移动插入符号。 IE< 9虽然不支持这些,但您需要在这些浏览器中使用输入的createTextRange()方法。

代码:

function moveCaretToEnd(el) {
    el.focus();
    if (typeof el.selectionStart == "number") {
        el.selectionStart = el.selectionEnd = el.value.length;
    } else if (typeof el.createTextRange != "undefined") {
        var range = el.createTextRange();
        range.collapse(false);
        range.select();
    }
}

答案 2 :(得分:2)

简单而且100%工作

static string path;
    path = Server.MapPath("~/Styles/images/");
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "<br><img  src='" + path + "checked.png' alt=''width='15' height='15' float='right' />" : "<br><img border='10' src='" + path + "unchecked.png' alt=''width='15' height='15' float='right' />"));

                current.Visible = true;

            }

            if (current.HasControls())
            {
                VesselDetails.PrepareControlForExport(current);
            }
        }
    }