服务器端的<control> .Focus()不会滚动到视图</control>

时间:2010-05-01 18:25:22

标签: asp.net javascript

自定义验证控制:

<asp:CustomValidator
ID="valSex" runat="server" ErrorMessage="1.2 &lt;b&gt;Sex&lt;/b&gt; not specified"
EnableClientScript="true" ClientValidationFunction="ValidateSex" SetFocusOnError="True">Selection required</asp:CustomValidator>

客户端验证例程:

function ValidateSex(source, args) {

    var optMale = document.getElementById("<%=optMale.ClientID %>");
    var optFemale = document.getElementById("<%=optFemale.ClientID %>");

    if (!optMale.checked && !optFemale.checked) {
        args.IsValid = false;
        optMale.focus();
    }
    else
        args.IsValid = true;
}

当提交页面并且未指定Sex时,焦点已设置但是2个单选按钮不在视图中,需要垂直滚动才能将其显示在视图中。

Focus()方法不应该将焦点控制带入视图吗?

1 个答案:

答案 0 :(得分:2)

我不认为所有浏览器都必须以这种方式实现它。您可以使用scrollTo(x, y)将其滚动到视图中。

以下应该可以解决问题:

function scrollToElement(elementId)
    var offset = findPos(document.getElementById(elementId));
    var x = offset[0];
    var y = offset[1];

    window.scrollTo(x, y);
}

function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);// yes, it's an assignment
    }
    return [curleft,curtop];
}

更多关于在http://www.quirksmode.org/js/findpos.html找到职位的信息。