views:

400

answers:

2

I have a search page with 3 TextBoxes that users can filter a search with.

I have put the focus on the TextBox that contains text. If more than one contains text just focus on last TextBox.

private void SetFocusOnTextBox(ControlCollection ctrlCollection)
{
    foreach (Control ctrl in ctrlCollection)
    {
        if (ctrl.GetType() == typeof(TextBox))
        {
            if (((TextBox)ctrl).Text != string.Empty)
            {
                SetFocus(ctrl);
            }
        }
    }
}

After the code runs and a user searches, the focus comes to the beginning of the TextBox, not the end where it would be presumed. How to put insert marked at the end of that TextBox?

A: 

Shouldn't it be

if (((TextBox)ctrl).Text == string.Empty)

to advance to the bottommost empty textbox? If it is if (((TextBox)ctrl).Text != string.Empty), it will set focus (eventually) to the bottommost nonempty textbox.

As for advancing your cursor to the last character, try this:

function cursorToEnd( elem )
{
  elem.focus();
  elem.value+='x';
  elem.value=elem.value.replace(/x$/,"");   
}
rlb.usa
No right now it's correct that I want the focus on the bottommost nonempty textbox. How do I call on the Function, and the function take the textbox i choose from code-behind?
Niike2
+1  A: 

I think the answer is here: Use JavaScript to place cursor at end of text in text input element.

Taken from the linked solution: You have to add onfocus="this.value = this.value" to the three controls in the markup file. This is not so easy in ASP.NET as it should be, but one solution is to add the attribute in the code behind file.

protected void Page_Init(object sender, EventArgs e)
{
    // MoveCursorToEndOnFocus is called in Page_Init and not Page_Load to avoid
    // filling the ViewState with unnecessary data.
    // TODO: Call MoveCursorToEndOnFocus here.
}

private void MoveCursorToEndOnFocus(ControlCollection controlCollection)
{
    foreach (TextBox textBox in controlCollection
        .Where(control => control.GetType() == typeof(TextBox)))
    {
        textBox.Attributes.Add("onchange", "this.value = this.value");
    }
}
Jan Aagaard
The answer maybe is there, I'm a total beginner at Javascript and JQuery. I cant figure out how to call the Javascript function(s) from code-behind. And the Javascript cant use a "Fixed" textbox, It has to take the textbox I choose also from Code-behind.
Niike2
You can't really call JavaScript function from code behind. But you can use code behind to generate a JavaScript function that will be called when the page loads. This is what `Page.SetFocus()` does.
Jan Aagaard