在回发期间禁用提交按钮

时间:2013-10-08 12:04:30

标签: javascript asp.net

我正在尝试在表单提交期间禁用该按钮,但无法执行此操作。这是javascript代码

<script type="text/javascript">
function Validate(b)
{
function stuff()
{
var temp = document.getElementById("<%=txt_stuff.ClientID %>").value;
var val = /^[a-zA-Z0-9 ]+$/
if(temp=="")
{
alert("Please Enter Stuff");
return false;
}
else if(val.test(temp))
{
return true;
}
else
{
alert("Name accepts only spaces and charcters");
return false;
}
}
function price()
{
var temp2 = document.getElementById("<%=txt_price.ClientID %>").value;
var val2 = /^[0-9 ]+$/
if(temp2=="")
    {
    alert("Please Enter Price");
    return false;
    }
else if(val2.test(temp2))
    {
    return true;
    }
else
    {
    alert("Price accepts only Number");
    return false;
    }
}
if(stuff() && price())
{
b.disabled = true;
b.value = 'Submitting...';
return true;
}
else
{
return false;
}
}

</script>
Here is the button code



 <asp:Button ID="Button2" runat="server" Text="Add Record" OnClientClick = "return Validate(this)" 
         onclick="Button2_Click" />

该按钮被禁用但该值未提交到数据库中。

数据库更新代码

 protected void Button2_Click(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(500);
            SqlConnection con = new SqlConnection();
            con.ConnectionString = "Data Source=DTPXP-77A;Initial Catalog=practice;Integrated Security=true";
            con.Open();
            SqlCommand cmd = new SqlCommand("insert into expense values(@person,@item,@expdate,@price)", con);
            cmd.Parameters.Add("@person", SqlDbType.VarChar);
            cmd.Parameters.Add("@item", SqlDbType.VarChar);
            cmd.Parameters.Add("@expdate", SqlDbType.DateTime);
            cmd.Parameters.Add("@price", SqlDbType.Int);
            cmd.Parameters["@person"].Value = droplist_person.SelectedItem.ToString();
            cmd.Parameters["@item"].Value = txt_stuff.Text;
            cmd.Parameters["@expdate"].Value = DateTime.Now.ToString();
            cmd.Parameters["@price"].Value = txt_price.Text;
            cmd.ExecuteNonQuery();
            InsertHistory();
            Response.Redirect("Add.aspx");

        }

2 个答案:

答案 0 :(得分:1)

删除UseSubmitBehavior =&#34; false&#34;属性? 并且您不需要在javascript中返回anithing(返回false用于取消回发)

答案 1 :(得分:0)

我认为这是您将项目插入数据库的方式,因为您说它禁用了按钮但没有插入数据库。所以对我来说,这意味着事件正在解雇,但插入方式有问题。这是我的按钮看起来的样子,使用你的代码..

protected void Button2_Click(object sender, EventArgs e)
    {
        string person = droplist_person.SelectedItem.Text;
        string item = txt_stuff.Text;
        string expdate = DateTime.Now.ToString();
        string price = txt_price.Text;

        System.Threading.Thread.Sleep(500);
        SqlConnection con = new SqlConnection("Data Source=DTPXP-77A;Initial Catalog=practice;Integrated Security=true");
        con.Open();
        SqlCommand cmd = new SqlCommand("INSERT INTO (expense person, item, expdate, price) VALUES (@person, @item, @expdate, @price)", con);
        cmd.Parameters.AddWithValue("@person", person);
        cmd.Parameters.AddWithValue("@item", item);
        cmd.Parameters.AddWithValue("@expdate", expdate);
        cmd.Parameters.AddWithValue("@price", price);
        cmd.ExecuteNonQuery();
        InsertHistory();
        Response.Redirect("Add.aspx");

        Button2.Enabled = false; //you can disable the button one the button click as well. 

        Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function", "mess();", true);

        }

我也会在try / catch中包围它。另外,据我所知,Add是将项目插入数据库的“旧”方式。 AddWithValue将是您从下拉列表和文本框中插入项目的最佳方式。我认为这就是问题所在。您也可以将连接放在SqlConnection内部的连接中,如上所述“清理”一些东西。关于你的“第二”问题,我不完全确定你的意思,但我希望这能解决你的第一个问题。

编辑:添加了按钮的禁用,因为它已在标题中描述。

编辑2:此外,删除UseSubmitBehavior =“false”和OnClientClick。相反,您可以在后面的代码中调用该消息。例如,请查看上面的内容。

编辑3:根据我的理解,您将希望保留代码插入值的内容。所以保持OnClientClick =“return Validate();”然后在按钮单击中,禁用按钮。然后你会想要添加if(!PostBack)到页面加载,就像这样..如果回发发生,这将启用页面加载按钮。那么将要发生的是你禁用按钮,然后一旦它回发,它将被重新启用。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
     {
       Button2.Enabled = true;
     }
}