重置/清除表单数据,聚焦单选按钮

时间:2009-11-30 12:32:43

标签: c# javascript clear

我是所有这一切的新手所以请温柔!好的,目前我有以下情况。

我有三种搜索产品详细信息的方法:

  1. 级联下拉列表(ddlbuyer,ddlSub,ddlProd)和相关的radiobutton(radProd)

  2. 搜索产品信息的自动填充文本框(txtPrdAC)

  3. 产品列表搜索,用户输入他们希望看到的项目数(txtHowMany),然后指定他们希望看到的子类别(radTopx)

  4. 我最理想的是以下情况。

    用户只能使用上述列表中的一种搜索产品的方法。如果他们单击第一个ddl,则清除文本框中可能存在的任何数据。同样,如果他们单击txtPrdAC或txtHowMany,则清除ddl列表中存在的任何信息,并返回其原始的默认值。

    我想在c#代码中执行此操作并且到目前为止已经获得了以下代码正在运行... ish!好吧,无论如何它都设置了单选按钮的焦点。

     ddlProd.Attributes.Add("onchange", "return SetRadioFocus('" 
                                       + radBuyer.ClientID + "');");   
     radTopx.Attributes.Add("onclick", "return SetRadioFocus('" 
                                       + radTopx.SelectedItem + "');");   
     tbxProdAC.Attributes.Add("onclick", "return SetRadioFocus('" 
                                       + radProd.ClientID + "');");   
    
     ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", @"   
              function SetRadioFocus(target)   
              {                    
                document.getElementById(target).checked = true;
              }", true); 
    

    但是,我仍然缺少某些方面,即清理文本框和/或ddl。 再次,为无知道歉,但这已经引起了我的兴趣。感谢您提供帮助。

1 个答案:

答案 0 :(得分:0)

我可以想象这个问题的完整解决方案可能相当复杂,但我认为这样做的简单解决方案可能如下:

    ddlProd.Attributes.Add("onchange", "ResetDefaults('"+ddlProd.ClientID+"'); SetRadioFocus('"
                                      + radBuyer.ClientID + "');");
    radTopx.Attributes.Add("onclick", "ResetDefaults('"+radTopx.ClientID+"'); SetRadioFocus('"
                                      + radTopx.SelectedItem + "');");
    tbxProdAC.Attributes.Add("onclick", "ResetDefaults('"+tbxProdAC.ClientID+"'); SetRadioFocus('"
                                      + radProd.ClientID + "');");

    ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", @"
      function ResetDefaults(exclude)
      {
        if(exclude != '" + ddlProd.ClientID + @"') document.getElementById('" + ddlProd.ClientID + @"').value = null;
        if(exclude != '" + txtPrdAC.ClientID + @"') document.getElementById('" + txtPrdAC.ClientID + @"').value = "";
        if(exclude != '" + txtHowMany.ClientID + @"') document.getElementById('" + txtHowMany.ClientID + @"').value = "";
      }
      function SetRadioFocus(target)   
      {
        document.getElementById(target).checked = true;
      }", true);

话虽如此,我并不完全确定这是否是您想要的行为。每当用户单击其中一个文本框时,所有其他控件中的值都将被清除,因此我看不到用户如何能够填写整个内容,除非这些字段是互斥的且用户只是应该将数据输入其中一个。否则,您可能需要考虑改进此逻辑,以便仅在某些条件下清除控制值。

此外,您可能希望使用onblur事件而不是onclick。用户可以将焦点标记到控件而不是单击它们,在这种情况下,我认为onclick事件不会被触发。只要焦点离开控件,就会触发onb​​lur事件。您可能还需要/需要添加更多javascript代码,这些代码可以检测用户是否实际对控件的值进行了任何更改,或者是否只关注控件然后将其保留。