如何防止按钮文字改变?

时间:2015-07-06 05:31:10

标签: asp.net vb.net

我有两个问题:

1.我有一个名为“启用”的按钮,一旦点击它就会变为禁用,我使用了“onclick”。在该按钮本身我使用了“onclientclick”来验证存在的文本框(警告是否为空白文本框点击启用,我使用了javascript)。问题是每次它提醒页面加载,按钮文本从启用变为禁用,即使没有点击

2.我有多个按钮,我希望chnge从启用到单击禁用。是否有可能在后端有一个公共代码

 Protected Sub cyoeno_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cyoeno.Click


    If cyoeno.Text = "Enable" Then
        cyoeno.Text = "Disable"
    Else
        cyoeno.Text = "Enable"

    End If

End Sub

按钮

 <asp:Button ID="cyoeno"  OnClientClick="return validate();" OnClick="cyoeno_Click"   runat="server" Text="Enable" />

的Javascript

 function validate(cyclenumber)
  {


       var cycle_1_enddate = document.getElementById('<%=txtEndDate.ClientId%>').value;
       var cycle_1_startdate = document.getElementById('<%=txtStartDate.ClientId%>').value;

       validatecommon(cycle_1_enddate,cycle_1_startdate);

           }

    function validatecommon(cal1,cal2) {


        if (cal1 == '' && cal2 == '') {
            alert("Start Date and End Date can not be left blank ");
            return true;
        }
        if (cal1 == '') {
            alert("End Date can not be left blank ");
            return true;
        }
        if (cal2 == '') {
            alert("Start Date can not be left blank ");
            return true;
        }

        if (cal1 != '' || cal2 != '')
         {
            var dt1 = Date.parse(cal1);
            var dt2 = Date.parse(cal2);
            if (dt1 <= dt2) {
                alert("End Date must occur after the Start date ");
                return true;
            }

             }

        return true;
    }

3 个答案:

答案 0 :(得分:0)

嗯,我不是JavaScript或asp.net的专家,但你可以创建句柄来处理几个按钮的点击事件,看起来像这样;

Private Sub MultipleButtonClick(ByVal sender AS Object, ByVal e as System.EventArgs) Handles Button1.Click, Button2.click 'etc

    Dim btn as Button = DirectCast (sender,Button)
    If btn.Text = "Enable" Then
        btn.Text = "Disable"
    Else
        btn.Text = "Enable"
    End If
End Sub

这里假设所有按钮都具有相同的文本。如果没有,那么你仍然可以使用相同的原则,但你也需要使用select语句;

Private Sub MultipleButtonClick(ByVal sender AS Object, ByVal e as System.EventArgs) Handles Button1.Click, Button2.click 'etc

    Dim btn as Button = DirectCast (sender,Button)

    Select Case btn.name

        Case "First name"
                'do stuff here
        Case "Second Name"
                'do stuff here
        Case Else
            Exit Select

    End Select

    End If
End Sub

HTH

答案 1 :(得分:0)

您实际上是在发送重复的点击信号,这就是为什么即使您只点击一次,您的功能也会执行两次。

第一个信号是:

Handles cyoeno.Click

重复信号是:

OnClick="cyoeno_Click"

您基本上需要做的是删除其中一个。既可以使用Handles,也可以使用OnClick。不是两个。

答案 2 :(得分:0)

正如我之前所说的问题是在javascript中。你在每个地方都返回true但是如果有任何验证问题那么你的功能应该返回false。 因为如果该函数返回false,则如果为true则不会发生回发事件,那么它将直接转到服务器。

简而言之,使用return false来避免页面加载。

此外,如果这是您的实际代码,那么我不确定您为什么要更改按钮的文本而不是理想情况下您应该使用cyoeno.Enabled = true;cyoeno.Enabled = false;

对于下面的第二个问题,方法可以帮助你(它在C#中,但你可以使用它的逻辑)

public void ToggleEnableDisable(Button btn)
{
    if (btn.Enabled)

    {
        btn.Enabled = false;
    }
    else
    {
        btn.Enabled = true;
    }
}

在调用它时使用

ToggleEnableDisable(cyoeno);