Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, não tenho lá muita esperiência com JavaScript, muito menos utilizando-o com o ASP .NET.
Gostaria de saber se tem como, primeiramente deixar todo script no codebehind e esconder do usuário o código. Depois, gostaria de saber se tem como chamá-lo sem callback.
Por exemplo, com elementos html posso fazer muito simplesmente algo como:
<script type="text/javascript">
<!--
function mudaTexto() {
document.getElementById("txtbox").value = "Meu Texto";
}
-->
</script>
...
<input id="txtbox" value="" disabled="true">
<button type="button" onclick="mudaTexto()">Mudar Texto</button>
...
Mas caso queira fazer utilizando elementos ASP preciso utilizar algo como "Page.ClientScript.RegisterStartupScript" no evento "onclick" do botão, ou "Button1.Attributes.Add(evento,return minhafuncao)" e sempre que tento inserir o javascript ele recarrega a página, não executa simplesmente o javascript. O que posso fazer para modificar esse comportamento?>
Se quiser usar um botão do asp.net tera que usar o evento onclientclick. Mas se seu javascript estiver escrito no c# terá que escrever no evento Page_Load. Mas ja adianto que isso não ira esconder o codigo do usuario, ficara exposto no código fonte da mesma forma.
Abraços...
E como vejo quais eventos posso utilizar pra fazer isso? Na verdade o botão foi só um exemplo. No momento o que quero mesmo é utilizar uma dropdownlist que carregará informações de um banco de dados e algumas opções selecionadas precisarão de detalhamento, então por exemplo o usuário seleciona a opção 1, tudo bem, pode salvar as alterações, mas caso selecione a opção 2 aparecerá uma caixa de texto pedindo mais informações. Como posso fazer algo do tipo?
Acho melhor tirar essas dúvidas no fórum de javascript, eles saberão melhor quais eventos são chamados no javascript.
Abraços...
Só pra não deixar o tópico sem solução e para ajudar caso alguém venha a ter o mesmo problema:
O meu principal problema foi procurar no DOM os elementos ASP para executar o javascript.
Por exemplo, desativar a caixa de texto utilizando ASP.NET se modifica o atributo "enabled" dela, mas como javascript é um script clientside, os elementos ASP já não estão mais lá. O que se encontra na página são apenas elementos HTML; portanto, o que é preciso aqui é tratar o atributo "disabled" da caixa de texto, já que o atributo "enabled" só existe no elemento ASP.
Para o exemplo do botão uma solução simples é no evento Page_Load adicionar uma linha como esta:
Button1.Attributes.Add("evento","minhafuncao; return false;");
O "return false;" impede que a página seja carregada novamente.
Já o que eu queria, de selecionada tal opção da dropdownlist ativar ou desativar uma caixa de texto basta fazer algo como o seguinte:
// codebehind
protected void Page_Load(object sender, EventArgs e)
{
Dropdownlist1.Attributes.Add("onChange", "HabilitaTexto(); return false;");
}
// página aspx
...
<script type="text/javascript">
<!--
function HabilitaTexto()
{
if (document.getElementById("Dropdownlist1").value == "Other") {
document.getElementById("TextBox1").disabled = false;
}
else {
document.getElementById("TextBox1").disabled = true;
}
}
-->
</script>
...
<asp:dropdownlist ID="Dropdownlist1" runat="server">
<asp:ListItem Value="1">Item 1</asp:ListItem>
<asp:ListItem Value="2">Item 2</asp:ListItem>
<asp:ListItem Value="3">Item 3</asp:ListItem>
<asp:ListItem Value="Other">Outro</asp:ListItem>
</asp:dropdownlist>
Aqui outro erro que que estava cometendo é aquilo que falei do DOM no início. Eu estava tentando fazer isto:
Dropdownlist1.Attributes.Add("onselectedindexchanged", "HabilitaTexto(); return false;");
Mas o evento "onselectedindexchanged" somente existe para o elemento "asp:dropdownlist". Quando é executado o javascript, esse elemento já se transformou em um "select" HTML. Dessa forma, deve ser utilizado o evento "onChange", como pode ser visto a seguir:
Dropdownlist1.Attributes.Add("onChange", "HabilitaTexto(); return false;");
Se quiser usar um botão do asp.net tera que usar o evento onclientclick. Mas se seu javascript estiver escrito no c# terá que escrever no evento Page_Load. Mas ja adianto que isso não ira esconder o codigo do usuario, ficara exposto no código fonte da mesma forma.
Abraços...