JavaScript - Onchange con dos funciones

 
Vista:
sin imagen de perfil

Onchange con dos funciones

Publicado por Rodrigo (2 intervenciones) el 26/04/2017 19:42:16
Estimados, se que parece que esta pregunta ya se ha hecho, pero no encuentro una respuesta satisfactoria..

Tengo un html que carga combobox... con php.

El tema es que el ultimo combo, quiero que me permita mostrar en otra sección de la misma página dos cosas distintas relacionadas.

Una es una foto de un producto y la otra son preguntas sobre ese producto que ya estan en la base de datos.

Las preguntas y las fotos se muestran bien, si cargo una sola función por vez, pero ambas juntas no.

Osea esto No me funciona:

1
<select class="form-control" name="idProducto" id="idProducto" onchange=" cargaPreguntas(this.value); cargaFoto(this.value);">

Tambien he probado con esto.

1
2
3
<select class="form-control" name="idProducto" id="idProducto" onchange="cargarFuncion4y5(this.value);">
   <!-- aquí se carga los Equipos -->
</select>



La funcion que uso es esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function cargaPreguntas(str){
	if (str==""){
	 document.getElementById("Preguntas").innerHTML="";
	 return;
	}
        // código para IE7+, Firefox, Chrome, Opera, Safari
	if (window.XMLHttpRequest){
	 xmlhttp=new XMLHttpRequest();
        //código para IE6, IE5
	}else{
	 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlhttp.onreadystatechange=function(){
	  if (xmlhttp.readyState==4 && xmlhttp.status==200){
		document.getElementById("Preguntas").innerHTML=xmlhttp.responseText;
		}
	}
	xmlhttp.open('GET','Connections/funciones.php?idCombo=5&idProducto2='+str,true);
	xmlhttp.send();
}

y esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- Carga productos -->
function cargaFoto(str){
	if (str==""){
	 document.getElementById("FotoProducto").innerHTML="";
	 return;
	}
        // código para IE7+, Firefox, Chrome, Opera, Safari
	if (window.XMLHttpRequest){
	 xmlhttp=new XMLHttpRequest();
        //código para IE6, IE5
	}else{
	 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlhttp.onreadystatechange=function(){
	  if (xmlhttp.readyState==4 && xmlhttp.status==200){
		document.getElementById("FotoProducto").innerHTML=xmlhttp.responseText;
		}
	}
	 xmlhttp.open('GET','Connections/funciones.php?idCombo=4&idProducto='+str,true);
	 xmlhttp.send();
}

Como Dije por si sola funcionan bien pero juntas en un solo onchange no quiere.

Tambien intenté con esto:
1
2
3
4
function cargarFuncion4y5(str){
       cargaPreguntas(str);
       cargaFoto(str);
}
y nada.

Donde está mi error... (la consulta sql funciona bien. por separados pero juntas no quiere y las necesito juntas.)

Si alguien que sepa mas que yo en javascrip que me ayude por favor.

RJE.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lina
Val: 10
Ha disminuido 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Onchange con dos funciones

Publicado por Lina (4 intervenciones) el 27/04/2017 01:47:05
Hola,

Ummm, raro que no funcione, se me ocurre asi

1
2
3
4
5
6
7
8
9
10
<select class="form-control" name="idProducto" id="idProducto" onchange=" cargaPreguntas(this.value)">
</select>
 
function cargaPreguntas(valor){
 
//codigo
 
cargaFoto(valor)
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Onchange con dos funciones

Publicado por Rodrigo (2 intervenciones) el 27/04/2017 02:27:41
No lo he resuelto todavía, pero mirando
el inspector de Mozila me muestra que las consultas si se hacen si salen ambas.. pero solo una vuelve...

http://localhost/cencosud/Connections/funciones.php?idCombo=4&idProducto=2
http://localhost/cencosud/Connections/funciones.php?idCombo=5&idProducto=2

De mas está decir que ambas las probé por separado y funcionan bien independientemente, juntas no quieren,

Si alguien se le ocurre algo.
Se agradece.
RJE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 477
Bronce
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Onchange con dos funciones

Publicado por Alejandro (130 intervenciones) el 27/04/2017 04:47:22
Hola Rodrigo, porque no pruebas realizar primera una petición y cuando finalice esta realizas la segunda y por ultimo muestras el resultado. Modifique un poco tu codigo, intenta con esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// ESTAS VARIABLE GUARDA EL RESULTADO DE LA PRIMERA PETICIÓN
var firstResponse = null;
 
// PRIMERA FUNCION
function cargaPreguntas(str){
if (str==""){
document.getElementById("Preguntas").innerHTML="";
return;
}
// código para IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
//código para IE6, IE5
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
firstResponse = xmlhttp.responseText;
 
// LLAMO A LA SEGUNDA FUNCIÓN PARA REALIZAR LA SEGUNDA PETICIÓN
// RECUERDA PASARLE el parámetro str (no se de donde es que viene)
cargaFoto(str);
}
}
xmlhttp.open('GET','Connections/funciones.php?idCombo=5&idProducto2='+str,true);
xmlhttp.send();
}
 
 
function cargaFoto(str){
if (str==""){
document.getElementById("FotoProducto").innerHTML="";
return;
}
// código para IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
//código para IE6, IE5
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
// MUESTRO EL RESULTADO FINAL
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("Preguntas").innerHTML= firstResponse;
document.getElementById("FotoProducto").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open('GET','Connections/funciones.php?idCombo=4&idProducto='+str,true);
xmlhttp.send();
}

Nos Comentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Vainas
Val: 95
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Onchange con dos funciones

Publicado por Vainas (258 intervenciones) el 30/04/2017 19:38:44
Buenas:

varias cosas:

Declara return false para el error y return true al finalizar bien la funciona para que se ejecute la bubble o como se llame.

Creo que el error viene de declarar xmlhttp de forma global. En ambos casos pon un var delante.


Extra: Deberias usar jquery que es un poco mas facil.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Onchange con dos funciones

Publicado por Jose Manuel (1 intervención) el 22/08/2017 04:30:44
Hola, he tenido un problema similar y al final la solucion ha sido agrupar el codigo de ambas funciones en una sola funcion como proponia Lina.
Pero tuve otro problema; al principio no me funcionaba porque el navegador mantenia en cache el codigo original de la funcion.
Es una chorrada pero me llevo media hora darme cuenta. Una vez borrado el historial, funciona perfectamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar