none
Chamando uma função JQurey no cs RRS feed

  • Pergunta

  • Olá pessoal, estou com um problema em chamar uma função JQuery no Cs, tenho uma div que é chamada a partir de um linkbutton, com efeito JQuery, após um cadastro clico no botão salvar, e ele desaparece, para cadastrar um novo produto tenho que novamente clicar no linkbutton para ela aparecer.

    Assim, penso em colocar um chamado dentro do evento do btn cadastro, onde após cadastrar, a div ainda permanecerá na tela.

    Obrigado.

    quinta-feira, 28 de junho de 2012 18:12

Respostas

  • Marcos,

    Infelizmente não vai funcionar pq assim que gera o POSTBACK ele chama novamente a função que a gente colocou no JQUERY que oculta as caixas, então a gente precisa fazer uma pequena otimização(rs) para executar o código após o POSTBACK, vamos lá!

    1 - No final do seu código, antes de fechar a tag FORM, coloque o seguinte código:

    <asp:Literal ID="ltScript" runat="server" />

    2 - Adicione o código abaixo no método LkB_SalvarProduto:

    ltScript.Text = "<script>$('#cadProduto').show();</script>";

    Explicação
    Com a LITERAL no final da página a gente pode escrever qualquer coisa dentro dela, nesse caso a gente vai escrever o script que abre a janela que você quer, então a gente coloca no método que é disparado no postback a funcionalidade para preencher a LITERAL com o script para abrir a MODAL de produtos por exemplo.

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    • Marcado como Resposta Marcos Bazilio segunda-feira, 2 de julho de 2012 14:58
    sexta-feira, 29 de junho de 2012 18:26

Todas as Respostas

  • ClientScript.RegisterStartupScript(Page.GetType(), "nomeUnico", "<script>$('div').hide();</script>"


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze quinta-feira, 28 de junho de 2012 18:41
    quinta-feira, 28 de junho de 2012 18:41
  • Valeu Murilo, 

     mas não funcionou, ... minha div tem o id= "cadProduto", chamo na função.

    $(document).ready(function () {

     $('#cadProduto').hide();
                    $('#mostrar1').click(function (event) {
                        $("#cadFornecedor").hide();
                        event.preventDefault();
                        $("#cadProduto").show("slide");
                    });

    />

    quinta-feira, 28 de junho de 2012 18:54
  • Lembrando que tenho que exibir essa div a partir de um evento dela mesma.., quando clicar no botão salvar que existe nela (codigo em cs) eu carrego ela novamente.

    Valeu 

    quinta-feira, 28 de junho de 2012 18:59
  • Marcos, você quer executar um js apartir do code behind? é isso mesmo né?

    Você está usando ajax no botão de gravar?


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 28 de junho de 2012 19:05
  • Não estou usando ajax somente o JQuery, 

    E é isso mesmo.., tenho o evento do botão gravar no code Behind, e minha function esta na pagina asp

    quinta-feira, 28 de junho de 2012 19:18
  • Tenta:
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Nome", "$('#cadProduto').show()", true);


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze quinta-feira, 28 de junho de 2012 19:25
    quinta-feira, 28 de junho de 2012 19:25
  • Você pode tambem adicionar essa div somente após a pessoa clicar no salvar sem usar o js para isso.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 28 de junho de 2012 19:26
  • Não funcionou, ao digitar e clicar no salvar, a div some.....
    quinta-feira, 28 de junho de 2012 19:27
  • Acho que é por causa do seu .hide... seu script está no começo da página ou no final?

    Tenta isso:

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Nome", "$(function(){$('#cadProduto').show()});", true);


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 28 de junho de 2012 19:35
  • Esta no começo, mas Murilo, não há outra alternativa para exibir uma div, eu não preciso do efeito, somente que ela permaneça na tela para outros cadastros.
    quinta-feira, 28 de junho de 2012 19:45
  • E esses exemplos que tu tá me passando eu coloco no fim do evento do button né?
    quinta-feira, 28 de junho de 2012 19:46
  • Tanto faz o lugar, desde que você chame após as validações terem passado.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 28 de junho de 2012 19:51
  • É o negocio e fazer o kra clicar e abrir a div novamente, estou a dois dias tentando isso, e nada, tentei fazer um botão e pegar o evento desse botão... um rolo..., e nada... 
    quinta-feira, 28 de junho de 2012 19:56
  • Amigo,

    Envia seu código para a gente dar uma olhada pq via adivinhação não vai rolar...


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    sexta-feira, 29 de junho de 2012 02:35
  • Esse é o que chama as div's

      <script type="text/javascript">

       
            $(document).ready(function () {
        
         
                $('#cadFornecedor').hide();
                $('#mostrar').click(function (event) {
                    $("#cadProduto").hide();
                    event.preventDefault();
                    $("#cadFornecedor").show("slide");
                 
                });
               
                 
     
                    $('#cadProduto').hide();
                    $('#mostrar1').click(function (event) {
                        $("#cadFornecedor").hide();
                        event.preventDefault();
                        $("#cadProduto").show("slide");
          
                        
                    });
                   
               });
           
          </script>    
       
         


          
            
           
      
        <fieldset>
            <a style="color: black" href="#" id="mostrar">Cadastro de Fornecedores</a> | 
            <a style="color: black" href="#" id="mostrar1">Cadastro de Produtos</a> |
           
        </fieldset>

    sexta-feira, 29 de junho de 2012 13:11
  • Vamos lá...

    Primeiro eu fiz uma pequena alteração no seu javascript:

    <script language="javascript" type="text/javascript">
    $(document).ready(function(e) {
    	
    	$('#cadFornecedor').hide();
    	$('#cadProduto').hide();
    	
    	$('.m_fornecedor').click(function (event) {
    		event.preventDefault();
    
    		$("#cadProduto").hide();
    		$("#cadFornecedor").show("slide");
    	 
    	});
    	
    	$('.m_produto').click(function (event) {
    		event.preventDefault();
    	
    		$("#cadFornecedor").hide();
    		$("#cadProduto").show("slide");
    	});	
    });
    
    function fechar_tudo(){
    	$('#cadFornecedor').hide();
    	$('#cadProduto').hide();
    }
    
    </script>
    

    O que eu fiz?
    1 - veja que eu apenas organizei e coloquei as mesmas funções só que troquei o "#" por ".", essa alteração vai fazer com que o JQUERY atribua a funcionalidade a todos os objetos com a classe "m_fornecedor" e "m_produto"

    2 - criei uma nova função onde ele oculta todas as modals abertas, apra uso futuro.

    Depois eu fiz uma pequena alteração no html:

    <fieldset>
      <a style="color: black" href="#" id="mostrar" class="m_fornecedor">Cadastro de Fornecedores</a> | 
      <a style="color: black" href="#" id="mostrar1" class="m_produto">Cadastro de Produtos</a> |
    </fieldset>
    

    Veja que eu apenas adicionei o atributo "class" com a opção desejada para o JQUERY localizar o objeto e atribuir a funcionalidade que a gente criou lá em cima. 

    Quando você quiser fechar a div que estiver aberta só usar o OnClietClick="fechar_tudo();"

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    sexta-feira, 29 de junho de 2012 16:04
  • Blz, ficou bem mais organizado... 

    Para a div cadProduto eu uso o código abaixo para gravar algum item, e após executar ele fecha a div, só que eu quero que permaneça aberta para gravar novos itens, e o script que vc postou ele fecha após a gravação (código abaixo).

                                                                                                                                                          

     protected void LkB_SalvarProduto(object sender, EventArgs e)
            {
                using (var ctx = new Web1Entities())
                {

                        var g = new produto {  



                            nomeProduto = TxtProduto.Text,
                            idTipoProduto = Convert.ToInt32(DDLTipoProduto.SelectedItem.Value),
                        };


                        ctx.AddToproduto(g);

                        // efetiva os inserts
                        ctx.SaveChanges();


                    TxtProduto.Text = "";
                    CarregaCombo();



                }

            }

    valeu !!!

    sexta-feira, 29 de junho de 2012 16:32
  • Marcos,

    Ela vai fechar pq você não está usando AJAX para salvar, correto?
    Nesse caso você dispara um POSTBACK que acaba gerando um RELOAD da página, correto?


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    sexta-feira, 29 de junho de 2012 17:06
  • Isso...

    Eu estava tentando fazer o que o Murilo colocou .... 

    Colocando esse trecho após o CarregaCombo();

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Nome", "$(function(){$('#cadProduto').show()});", true);

     ... mas tb não esta funcionando.

    sexta-feira, 29 de junho de 2012 17:19
  • Marcos,

    Infelizmente não vai funcionar pq assim que gera o POSTBACK ele chama novamente a função que a gente colocou no JQUERY que oculta as caixas, então a gente precisa fazer uma pequena otimização(rs) para executar o código após o POSTBACK, vamos lá!

    1 - No final do seu código, antes de fechar a tag FORM, coloque o seguinte código:

    <asp:Literal ID="ltScript" runat="server" />

    2 - Adicione o código abaixo no método LkB_SalvarProduto:

    ltScript.Text = "<script>$('#cadProduto').show();</script>";

    Explicação
    Com a LITERAL no final da página a gente pode escrever qualquer coisa dentro dela, nesse caso a gente vai escrever o script que abre a janela que você quer, então a gente coloca no método que é disparado no postback a funcionalidade para preencher a LITERAL com o script para abrir a MODAL de produtos por exemplo.

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    • Marcado como Resposta Marcos Bazilio segunda-feira, 2 de julho de 2012 14:58
    sexta-feira, 29 de junho de 2012 18:26
  • Coloquei no final do código o literal, e tb, no button..... msm assim não funcionou.


    sexta-feira, 29 de junho de 2012 19:38
  • Se o seu button cadProduto for um <asp:Button> nunca vai funcionar usando $("#cadProduto");

    Quando a pagina é renderizada o seu botão recebe um outro nome.

    $("#<%=cadProduto.ClientID%>").click(function(){});


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    sábado, 30 de junho de 2012 02:41
  • Isso depende.. se for versão 4 você consegue controlar o ID dos elementos.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sábado, 30 de junho de 2012 03:24
  • Marcos.. acho que o seu problema é por causa do seu .hide... o server retorna um js para executar e mostrar.. mas  seu código é executado depois, portanto a div fica escondida denovo.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sábado, 30 de junho de 2012 03:25
  • Mas se eu tirar o .hide, a pagina inicia com a div amostra.... tentei jogar as funções dentro de um if ... não funcionou tb...
    sábado, 30 de junho de 2012 23:39
  • Marcos, boa tarde!

    Eu tenho também preciso que uma div hide seja exibida após um evento em uma aplicação minha e tenho isso resolvido ja.

    Eu uso esse código aqui:

    public static void executaScript(Page aPage, Object aThis, String Script)  { 

    aPage.ClientScript.RegisterStartupScript(aThis.GetType(), "strJSAlert", "<script language=Javascript type text/Javascript>" + Script + "</script>");        }

    Pra chamar chamar esse procedimento eu faço assim:

    protected void LkB_SalvarProduto(object sender, EventArgs e){
    [seu código]
    ...
    ...
    
    executaScript(Page, this,
    "document.getElementById('form_cadastro').style.display ='block'");
    
    }

    Não esqueça de marcar como útil uma resposta que te ajude.

    abçs



    • Editado hksistemas domingo, 1 de julho de 2012 21:02 inserir cod
    domingo, 1 de julho de 2012 20:56
  • Marcos,

    Como eu tinha dito lá em cima mantem tudo só tira o .hide da função js que a gente crio. O que você vai precisar fazer é o seguinte:

            if (!IsPostBack)
            {
                ltStatus.Text = "<script>$('#cadFornecedor').hide();$('#cadProduto').hide();</script>";
            }

    Isso vai fazer com que as caixas sejam ocultas se a página estiver carregando pela primeira vez, agora quando rolar o click no seu botão você precisar mandar uma ou outra ficar oculta, entendeu?

    Boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    segunda-feira, 2 de julho de 2012 12:20
  • Bom dia, Lucas....

    Fiz da forma que você descreveu....

    Desta forma o problema contínua 

    segunda-feira, 2 de julho de 2012 13:23
  • Opa... blz, 

     Bom, tentei fazer do seu jeito, mas também não funcionou, após salvar o produto a div some, e não aparece a menos que eu clique novamente.

    segunda-feira, 2 de julho de 2012 14:26
  • Consegui... Obrigado Lucas, segui a tua ideia, e coloquei no botão 

     ltStatus.Text = "<script>$('#cadFornecedor').hide();$('#cadProduto').show();</script>";

    Assim, ele tira uma div e permanece com a outra....

    Kra brigadão msm, 

    Ops, obrigado a todos que responderam .... 

    Até mais....

    segunda-feira, 2 de julho de 2012 14:53