Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ashramkun

[Resolvido] onchange combo

Recommended Posts

Ola novamente pessoal.

 

Em outro post, o usuário Ted´K me resolveu um problema de carregar as informações de um XML em um combobox, e deixa-lo clicável (valeu mais uma vez.. funcionou perfeito!). Apesar de entender a lógica dele, eu não estudei asp ainda, apenas usei alguns elementos em um TCC que fiz ano passado. Portanto gostaria de ver se alguem pode me ajudar a incrementar uma outra coisa no código dele.

 

Codigo XML

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfGetCommunitydata>

<getCommunitydata>
<link>www.google2.com</link>
<community_name>Madrid</community_name>
</getCommunitydata>

<getCommunitydata>
<link>www.google.com</link>
<community_name>Spain</community_name>
</getCommunitydata>

<getCommunitydata>
<link>www.google3.com</link>
<community_name>Brasil</community_name>
</getCommunitydata>

</ArrayOfGetCommunitydata>

ASP

<select name="yourChoiceOfName" onChange="if(this.selectedIndex!=0)self.location=this.options[this.selectedIndex].value">
<%
Set xml = Server.CreateObject("msxml2.ServerXMLHTTP")
xml.open "GET", "http://localhost/teste/xml_teste2.xml", False
xml.send

Set doc = Server.CreateObject("msxml2.DOMDocument")
doc.loadXML( xml.ResponseXML.xml )

Set items = doc.getElementsByTagName("getCommunitydata")
For inum = 0 To items.length-1
	Set curitem = items.item(inum)

	Set link = curitem.SelectSingleNode("link")
	Set nm = curitem.SelectSingleNode("community_name")
	If Not( link Is Nothing) AND Not( nm Is Nothing ) Then
		pkval = Trim(link.Text)
		nmval = Trim(nm.Text)
		Response.Write "<option value=http://"&pkval&">" & nmval & "</option>" & vbNewLine

	End If
Next
%>
</select>

Eu gostaria de adicionar outro evento no OnChange, ou seja, alem de carregar a pagina(que ja esta fazendo perfeitamente), ele executar esses comandos:

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder(Server.MapPath("name"))

Os comandos funcionam certinho, pois já usei eles no meu TCC =)

 

Depois de algumas tentativas em criar funcão e tentar chama-la, não tive sucesso. Eu tenho um pouco de dificuldade de entender o asp pois não se tem as {} que estou acostumado. Se fosse em actionscript no flash eu já teria resolvido, mas realmente queria tentar deixar em asp, e mais uma vez, acho que para quem entende de asp nao deve ser tão dificil.

 

Bom é isso ai. Se alguem puder me ajudar denovo ficaria muito grato. Lembre-se que não pretendo mudar a atual funcionalidade do código, apenas adicionar outros comandos no evento onchange.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae mano, esta função so pode ser feita por ajax, fiz aqui uma ação simples para você ter uma idéia

 

crie um arquivo asp chamado pasta.asp <- este arquivo é aonde vai ter o comando em asp para criar a pasta.

 

pasta.asp <-- neste arquivo coloque o seguinte codigo

 

<%
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder(Server.MapPath("name"))
%>

agora abra o seu arquivo aonde tem as funções passadas por você aqui neste tópico, coloque o seguinte script a cima do select do seu code, esta na verdade é a função ajax que vai receber o comando do onChange e é esta função que será responsável por executar a função FSO e com isso criar a pasta.

 

<script type="text/javascript">
function criapasta(){
var xmlHttp=null;
   try{
	  xmlHttp=new XMLHttpRequest();
   }
catch (e){
try{
	xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
	alert("sem dados");
return false;
}}
xmlHttp.onreadystatechange=function(){
  if(xmlHttp.readyState==4){
  if (xmlHttp.status==200){
acao(xmlHttp.responseText);
}}}
xmlHttp.open("GET", 'pasta.asp', true);
xmlHttp.send(null);
}
function acao(acaoasp){
}
</script>

Agora insira no onChange do select a função para executar o arquivo pasta por ajax, a função neste caso é criapasta()

 

ficara assim

 

<select name="yourChoiceOfName" onChange="criapasta();if(this.selectedIndex!=0)self.location=this.options[this.selectedIndex].value">

Pronto, eu testei aqui e funcionou perfeitamente.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Patrique

Antes de mais nada, muito grato pela resposta.

 

Então, eu testei aqui e não consegui. Fiz tudo o que você mandou, e o resultado final não acontece nada quando eu escolho algo no combobox. Fiz uns testes aqui, deixando apenas a função criapasta() no onChange, e ela não funcionou. Resolvi tirar essa funcão de la, deixando como estava originalmente, ai o link funcionou.

 

Em outras palavras, quando a função criapasta() entra no onChange, tudo para de funcionar. Devo ter feito algo de errado?

 

Valeu xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa... foi malz faltou uma apas simples no GET do javascript

 

arrumei agora, pode testar ae, depois fale se deu certo.

 

<script>
function criapasta(){
var xmlHttp=null;
try{
xmlHttp=new XMLHttpRequest();
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
alert("Sem Ajax!");
return false;
}}
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
if (xmlHttp.status==200){
acao(xmlHttp.responseText);
}}}
xmlHttp.open("GET", 'pasta.asp', true);
xmlHttp.send(null);
}

function acao(acaoasp){
}
</script>

arrumei lá em cima também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou perfeito. Muito obrigado mesmo!

 

Só tive que inverter a ordem que o onChange estava chamando as funções, mas depois disso ficou perfeita =)

 

Meu único problema eh que essa função não está funcionando no Chrome. Parece que ele não suporta ActiveX, e que precisa de um plugin chamado Npapi. Não vou mexer na função por causa disso, mas no futuro vou ver em arrumar isso.

 

Muito grato mesmo xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.