2

我有一个带有一些自定义验证的页面,它在验证摘要中显示结果。我想将此验证摘要重新定位到页面底部,而不会导致页面随着验证摘要的长度滚动。我有一个 jQuery 函数,它可以很好地做到这一点,但是,我需要在显示验证摘要后执行这个 jQuery,我不确定要触发哪个事件。

$(document).ready(function(){
$("#<%= vsmSummary.ClientID %>").change(function(){
    var newTop =   $(window).height() - $("#vsmSummary").height();
    var newLeft = ($(window).width()  - $("#vsmSummary").width()) / 2;

        $("#vsmSummary").css(
            {
                'position': 'absolute',
                'left': newLeft,
                'top': newTop
            }
        );
    });
});

在我的自定义验证方法中,我构建了这个字符串并在 RadScriptManager 中注册......

Dim scriptText As String = "$(document).ready(function(){ " + _
                            "$(""#<%= vsmSummary.ClientID %>"").ready(function(){" + _
                                "var newTop =   $(window).height() - $(""#vsmSummary"").height();" + _
                                "var newLeft = ($(window).width()  - $(""#vsmSummary"").width()) / 2;" + _
                                    "$(""#vsmSummary"").css(" + _
                                     "{" + _
                                            "'position': 'absolute'," + _
                                            "'left': newLeft," + _
                                            "'top': newTop" + _
                                     "}" + _
                                    ");" + _
                                "});" + _
                            "});"


RadScriptManager.RegisterClientScriptBlock(Me.upSCPPage, Me.upSCPPage.GetType(), "DynamicVSM", scriptText, True)

这行得通!感谢您的学习经验,我不知道我可以从后面的代码中调用它!我将来会做更多的事情!

4

2 回答 2

2

如果我理解正确,您想重新定位一个包含验证摘要的元素,那么 AFAIK jQuery 不提供任何事件来检测 innerHtml 更改。

我的建议是将它移到一个函数中,并从您的验证代码中按需调用它。

//in your validation code
$("#vsmSummary").html('Your Validation Message Here');
Reposition();

//in a separate function
function Reposition()
{
var newTop =   $(window).height() - $("#vsmSummary").height();
    var newLeft = ($(window).width()  - $("#vsmSummary").width()) / 2;

        $("#vsmSummary").css(
            {
                'position': 'absolute',
                'left': newLeft,
                'top': newTop
            }
        );
}

如果你想让它更干净,你甚至可以将它创建为一个 jQuery 函数:

jQuery.fn.reposition = function () {
var newTop =   $(window).height() - $(this).height();
var newLeft = ($(window).width()  - $(this).width()) / 2;

            $(this).css(
                {
                    'position': 'absolute',
                    'left': newLeft,
                    'top': newTop
                }
            );
}

然后这样称呼它:

$("#vsmSummary").html('Your Validation Message Here').reposition();

注意:您可以使用innerHTML.lengthand 进行检查setInterval(),但它是一种矫枉过正的解决方案。

于 2010-12-17T18:55:30.587 回答
0

尝试这个:

#vsmSummary {
    position: fixed;
    bottom: 0;
    left: 0;
    height: 25px;
}

始终应用此样式,而不是仅在验证摘要显示时应用。它应该将您的 div 固定到页面底部。

于 2010-12-17T19:00:46.147 回答