Сброс / очистка данных формы, переключение фокуса - PullRequest
0 голосов
/ 30 ноября 2009

Я новичок во всем этом, поэтому, пожалуйста, будьте нежны! Хорошо, в настоящее время у меня есть следующий сценарий.

У меня есть три способа поиска информации о товаре:

  1. Каскадный выпадающий список (ddlbuyer, ddlSub, ddlProd) и соответствующая кнопка радиосвязи (radProd)

  2. Текстовое поле автозаполнения, которое ищет информацию о продукте (txtPrdAC)

  3. Поиск в списке товаров, при котором пользователь вводит количество товаров, которые он хочет видеть (txtHowMany), а затем указывает, какую подкатегорию он хочет видеть (radTopx)

В идеале я хотел бы иметь следующую ситуацию.

Пользователь может использовать только один из методов поиска товаров, как указано выше. Если они нажимают на первый ddl, то любые данные, которые могут присутствовать в текстовых полях, очищаются. Точно так же, если они нажимают на txtPrdAC или txtHowMany, любая информация, которая присутствовала в списке ddl, очищается и возвращается к исходному значению по умолчанию.

Я хотел бы сделать это в коде c # и получить следующий код, который работает ... иш! Ну, в любом случае, он устанавливает фокус переключателя.

 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 голосов
/ 30 ноября 2009

Я могу представить полное решение этой проблемы, которое может быть довольно сложным, но простое решение, которое, я думаю, могло бы сделать то, о чем вы просите, могло бы быть следующим:

    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 будет запущено. Событие onblur запускается всякий раз, когда фокус покидает элемент управления. Вам также может потребоваться / нужно добавить больше кода javascript, который может определять, действительно ли пользователь внес какие-либо изменения в значение элемента управления или просто сосредоточился на элементе управления, а затем оставил его.

...