RadioButton没有“接收”焦点

时间:2011-11-29 21:38:19

标签: javascript asp.net focus radio-button

我已经将一些代码拼凑在一起用于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 :(得分:0)

解决方案可能是在前一个字段中添加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); 
        } 
    } 
}