Pergunta

Eu sou novo para tudo isso então por favor seja gentil! Ok, atualmente eu tenho o seguinte cenário.

Eu tenho três métodos de procura de detalhes do produto:

  1. A cascata lista drop (ddlbuyer, ddlSub, ddlProd) e um botão de opção associada (radProd) para baixo

  2. Uma caixa de texto autocomplete que procura por informações sobre o produto (txtPrdAC)

  3. Uma busca lista de produtos em que um usuário digita o número de itens que desejam ver (txtHowMany) e especifica que categoria sub eles desejam ver (radTopx)

O que eu realmente gostaria de ter é a seguinte situação.

Um usuário só pode utilizar um dos métodos de procura de produtos lista acima como. Se eles clique no primeiro ddl, em seguida, todos os dados que podem estar presentes nas caixas de texto está desmarcada. Da mesma forma, se eles clique no txtPrdAC ou txtHowMany, qualquer informação que estava presente na lista de ddl é limpa e regresso a volta a ele é original, valor padrão.

Eu gostaria de fazer isso em c # código por trás e, até agora, tenho o seguinte código que está funcionando ... ish! Bem, ele define o foco do botão de rádio de qualquer maneira.

 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); 

No entanto, ainda estou faltando certos aspectos ou seja, o cleainr as caixas de texto e ou ddl. Mais uma vez, desculpas para a ignorância, mas isso tem me jogado. Obrigado por qualquer ajuda que pode vir a caminho.

Foi útil?

Solução

Eu posso imaginar uma solução completa para este problema potencialmente ser bastante complexo, mas uma solução simples que eu acho que faria o que você está pedindo poderia ser a seguinte:

    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);

Dito isto, eu não estou totalmente certo se este é exatamente o comportamento que você gostaria. Sempre que o usuário clica em um desses caixas de texto, os valores em todos os outros controles serão apagados, então eu não vejo como o usuário seria capaz de preencher a coisa toda a menos que estes campos são mutuamente exclusivas e o usuário só é deveria inserir dados em um deles. Caso contrário, você pode precisar de considerar um refinamento dessa lógica apenas limpar os valores de controle sob certas condições.

Além disso, você pode querer usar o evento onblur em vez de onclick. A guia de usuário maio o foco para os controles em vez de clicar sobre eles, caso em que eu não acho que o evento onclick será demitido. O evento onblur é acionado sempre que o foco deixa o controle. Você também pode querer / necessidade de adicionar mais código javascript que pode detectar se o usuário realmente feitas quaisquer alterações ao valor do controle, ou se eles simplesmente focado no controle e, em seguida, deixou-o.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top