用javascript更改asp.net按钮的文本

时间:2010-08-21 22:35:46

标签: javascript asp.net

我有一个表单提交按钮,它连接了asp.net验证器。如果我使用javascript函数将文本更改为处理时单击它不起作用。该按钮标记验证器,并使整个页面回发。这是我的代码:

C#

 protected void Page_Load(object sender, EventArgs e)
{
    btnPurchase.Attributes["onClick"] = "submit()";
}

HTML

<script type="text/javascript">
    function submit() {
        document.getElementById("ctl00_ContentPlaceHolder1_btnPurchase").value = "Processing";
    };
</script>

如果表单通过验证,我的目标是将按钮文本更改为购买onclick,然后在我后面的代码中,一旦表单回发,它将更改回原始值。

2 个答案:

答案 0 :(得分:2)

我遇到了这个100%完美的解决方案。我正在使用脚本管理器和更新面板...

<script type="text/javascript">

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();

        // Using that prm reference, hook _initializeRequest
        // and _endRequest, to run our code at the begin and end
        // of any async postbacks that occur.
        prm.add_initializeRequest(InitializeRequest);


        // Executed anytime an async postback occurs.
        function InitializeRequest(sender, args) {
            // Get a reference to the element that raised the postback,
            //   and disables it.
            $get(args._postBackElement.id).disabled = true;
            $get(args._postBackElement.id).value = "Processing...";
        }
        // Executed when the async postback completes.
        function EndRequest(sender, args) {
            // Get a reference to the element that raised the postback
            //   which is completing, and enable it.
            $get(args._postBackElement.id).disabled = false;
            $get(args._postBackElement.id).value = "Purchase";
        }

</script>

答案 1 :(得分:1)

我刚问了一个非常相似的问题(已经回答): ASP.NET Custom Button Control - How to Override OnClientClick But Preserve Existing Behaviour?

基本上,您需要保留提交按钮(__doPostBack)的现有行为。您可以使用Page.GetPostBackEventReference(myButton)执行此操作。

然而,通过验证会更加困难,因此您需要内联页面验证(Page.Validate())或创建自定义控件,并覆盖OnClientClickPostBackOptions成员

自定义控件更好,因为我现在可以将此控件放在我想要此行为的任何页面上。

您可以这样做并公开一个公共财产:

public string loadingText {get; set;}

可用于自定义每页上的加载文本。

您基本上需要设置onclick属性来执行以下操作:

onclick = "if (Page_Validate()) this.text = 'Processing';{0} else return false;"

{0}应该是从Page.GetPostBackEventReference中检索的常规回发操作。

结果逻辑将是:点击,验证页面,成功,更改文本和回发,如果失败,返回false - 这将在页面上显示验证。

将按钮设置为HTML中的默认文本“提交”,然后将上述逻辑包装在!Page.IsPostBack中,以便重置表单提交上的文本。

希望有所帮助。