RadioButton не «получает» фокус - PullRequest
1 голос
/ 30 ноября 2011

Я собрал некоторый код для использования в ASP.NET, чтобы элементы управления не теряли фокус при обратной передаче, поэтому вкладка ИЛИ щелчок другого элемента управления сохраняет положение пользователя и возвращает его.

В Page_Load у меня есть следующее:

PartNum_tb.Attributes["onfocus"] = "gotFocus(this)";
Department_tb.Attributes["onfocus"] = "gotFocus(this)";
PartWeight_tb.Attributes["onfocus"] = "gotFocus(this)";
Standard_rb.Attributes.Add("onfocus","gotFocus(this)");
Special_rb.Attributes.Add("onfocus","gotFocus(this)");

if (Page.IsPostBack)
   Page.SetFocus(tabSelected.Value);

Это мой Javascript (tabSelected - скрытое поле):

<script type="text/javascript">
    function gotFocus(control) {
        document.getElementById('form1').tabSelected.value = control.id;

        if (control.type == "text") {
            if (control.createTextRange) {
                //IE  
                var FieldRange = control.createTextRange();
                FieldRange.moveStart('character', control.value.length);
                FieldRange.collapse();
                FieldRange.select();
            }
            else {
                //Firefox and Opera  
                control.focus();
                var length = control.value.length;
                control.setSelectionRange(length, length);
            }
        }
    }
</script>

Проблема в том, когда я вкладываю илинажмите на одну из переключателей, она вернет фокус к тому, что было вместо последнего элемента управления, что не является интуитивно понятным и вводит пользователя в заблуждение.Это происходит потому, что RadioButton никогда не фокусируется, поэтому позиция курсора не обновляется.После обширного поиска в Google выяснилось, что на самом деле невозможно узнать, когда RadioButton получает фокус .Известно ли какое-либо решение, которое даже могло бы обойти эту проблему?

1 Ответ

0 голосов
/ 02 декабря 2011

Решением может быть добавление события keypress к предыдущему полю и использование события click на радиостанциях. Также, переместите control.focus(); из оператора if:

Javascript

function changeFocus(next) {
    gotFocus(next);
}

function gotFocus(control) { 
    document.getElementById('form1').tabSelected.value = control.id; 
    control.focus();

    if (control.type == "text") { 
        if (control.createTextRange) { 
            //IE   
            var FieldRange = control.createTextRange(); 
            FieldRange.moveStart('character', control.value.length); 
            FieldRange.collapse(); 
            FieldRange.select(); 
        } 
        else { 
            //Firefox and Opera   
            var length = control.value.length; 
            control.setSelectionRange(length, length); 
        } 
    } 
} 
...