Foros del Web » Programando para Internet » Javascript »

JavaScript solo puede abrir una vez un documento?

Estas en el tema de JavaScript solo puede abrir una vez un documento? en el foro de Javascript en Foros del Web. Hola buenas, estoy intentando hacer una "cosa", y me he topado con una piedra(no se si es JS o AJAX), les pongo mi codigo Código ...
  #1 (permalink)  
Antiguo 06/05/2009, 21:07
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
JavaScript solo puede abrir una vez un documento?

Hola buenas, estoy intentando hacer una "cosa", y me he topado con una piedra(no se si es JS o AJAX), les pongo mi codigo

Código HTML:
<script language="javascript">

function nuevoAjax()
{ 
	var xmlhttp=false; 
	try 
	{ 
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch(e)
	{ 
		try
		{ 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch(E) { xmlhttp=false; }
	}
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 

	return xmlhttp; 
}

function existeArticulo() {
	var msj          = document.getElementById('MsjVentas');
	var art_a_buscar = document.getElementById('Articulo').value;
	var mostrador    = document.getElementById('mostrador');
	var button       = document.getElementById('buscar__');
	button.disabled  = true;

	if(document.getElementById(art_a_buscar) == undefined) {
		
		var ajax=nuevoAjax();
		ajax.open("POST", "/Libreria/tienda.ajax.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send("accion=ExistenciaDeArticulo&IdArticulo="+art_a_buscar);
		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				var resultado = ajax.responseText;
				if(resultado=='existente') {
					var articuloId   = document.createElement('div');
					var unidades   = 0;
					var descuento = 0;
					articuloId.id=art_a_buscar;
					mostrador.appendChild(articuloId);
					return true;
				}
				else {
					msj.innerHTML='no existe indio pasmado';
					button.disabled = false;
					return false;
				}
			}
		}
	}
	else {
		var unidades   = document.getElementById('Unidades_'+art_a_buscar).value;
		var descuento = document.getElementById('Descuento_'+art_a_buscar).value;
		return false;
	}
}

function buscarArticulo() {
	var button             = document.getElementById('buscar__');
	var art_a_buscar  = document.getElementById('Articulo').value;
	var articuloId        = document.getElementById(art_a_buscar);
	if(existeArticulo()) {
		button.disabled = false;
		var ajax=nuevoAjax();
		ajax.open("POST", "/Libreria/tienda.ajax.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send("accion=CargarArticulo&IdArticulo="+art_a_buscar+"&Unidades="+unidades+"&Descuento="+descuento);
		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				articuloId.innerHTML = ajax.responseText;
			}
		}		
	}
	return false
}

</script> 
he copiado solo el codigo JavaScript, yo se mas de PHP que JS (cuanto se, es muy poquito, lo basico, pero eso no importa) y uso ciertos pasos que uso en PHP como if(existeArticulo()), que en PHP es valido solo si retorna true la funcion, antes lo tenia solo con una funcion, y no trabajaba, la hice en dos funciones (eso de variables locales y globales en PHP, referente a la var ajax esta dos veces), el muy cachimbon problema es que precisamente if(existeArticulo()) no se ejecuta, eso lo se porque button.disabled = false; no me habilita el boton de nuevo!!!, que hago!!!, segun el programa corre sin problemas, IE no me dice que hubo errror en el codigo!!
  #2 (permalink)  
Antiguo 06/05/2009, 23:01
 
Fecha de Ingreso: abril-2009
Mensajes: 56
Antigüedad: 15 años
Puntos: 4
Respuesta: JavaScript solo puede abrir una vez un documento?

Che tené cuidado, porque según entiendo (puedo estar equivocado porque no estoy 100% seguro) cuando desabilitas un submit este queda desabilitado y no se puede habilitar más.
Por si las dudas (si lo estás haciendo con un submit) probá hacerlo con un tipo button haber que pasa.

Espero te resulte. Exitos
  #3 (permalink)  
Antiguo 06/05/2009, 23:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: JavaScript solo puede abrir una vez un documento?

me parece que el problema debe estar aqui if(document.getElementById(art_a_buscar) == undefined) {. cuando getElementById no encuentra un elemento este devuelve null. el problema aqui es que null y undefined evidentemente no son lo mismo. prueba con if(document.getElementById(art_a_buscar)) {
  #4 (permalink)  
Antiguo 07/05/2009, 00:16
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: JavaScript solo puede abrir una vez un documento?

hace un rato quice responder, pero claro, FDW estava en mantenimiento. ME esta pasando seguido, creo que debo recordar no entrar a ciertas horas.

Bueno, lo que te decia es que uses

if(!document.getElementById(art_a_buscar)){

en lugar de como lo tienes.
__________________
twitter: @imbuzu
  #5 (permalink)  
Antiguo 07/05/2009, 08:48
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

Ninguno de esos es el problema.
1. el bottom no es un submit, es un button.
2. podes probar esta funcion y funciona perfectamente.

Código:
<html>
<head>
<script language="javascript">
function existeArticulo() {
	var art_a_buscar = document.getElementById('Articulo').value;
	var mostrador    = document.getElementById('mostrador');
	var button       = document.getElementById('buscar__');
	button.disabled  = true;

	if(document.getElementById(art_a_buscar) == undefined) {
		var articuloId       = document.createElement('div');
		articuloId.id        = art_a_buscar;
		articuloId.innerHTML = 'primera vez que buscas: '+art_a_buscar;
		mostrador.appendChild(articuloId);
		button.disabled  = false;
	}
	else {
		var articuloId       = document.getElementById(art_a_buscar);
		articuloId.innerHTML = 'Segunda vez o mas que buscas: '+art_a_buscar;
		button.disabled      = false;
	}
}
</script>
</head>
<body>
<input type="text" id="Articulo" value=""><input type="button" value="verifica" onclick="existeArticulo()" id="buscar__">
<div id="mostrador"></div>
</body>
</html>
y si se fijan, uso if(document.getElementById(art_a_buscar) == undefined) y trabaja perfectamente
  #6 (permalink)  
Antiguo 07/05/2009, 14:06
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: JavaScript solo puede abrir una vez un documento?

Agrega un alert() después de
if(existeArticulo()) {

Para saber si se está ejecutando el código o no.

Se te imprime:
'no existe indio pasmado'
en el div o no se ejcuta esa acción?
__________________
twitter: @imbuzu
  #7 (permalink)  
Antiguo 07/05/2009, 14:40
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

si imprime:
'no existe indio pasmado' cuando PHP returna otro valor que no sea existente.

Hasta ahorita tengo la impresion de que PHP corre bien, y que JS interpreta bien la salida.

Hasta ahora ya hice ocurra if(existeArticulo()) {
cambiandolo a:

if(!existeArticulo()) {


Extranyo a mi punto de ver, pues existeArticulo returna true solo si encuentra el objeto en el documento o si PHP retorna 'existente'. corre, pero como no lo logro entender no puedo avanzar aplicandole mas funciones .....

if(existeArticulo() == true) : no corre
if(existeArticulo() == false) : no corre
if(existeArticulo()) : no corre
if(!existeArticulo()) : corre


Pregunto: no es igual if(existeArticulo() == false) que if(!existeArticulo()) ???????/

Última edición por rudy69; 07/05/2009 a las 14:49
  #8 (permalink)  
Antiguo 07/05/2009, 14:47
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: JavaScript solo puede abrir una vez un documento?

por que no pones alert(button) después de msj.innerHTML = 'no existe indio pasmado';? Esto para comprobar que la variable sigue estando "viva"
__________________
twitter: @imbuzu
  #9 (permalink)  
Antiguo 08/05/2009, 12:56
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

Aver, este es el nuevo codigo, arreglado las deficiencias que tenia:

Código:
<script language="javascript">

function nuevoAjax()
{ 
	var xmlhttp=false; 
	try 
	{ 
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch(e)
	{ 
		try
		{ 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch(E) { xmlhttp=false; }
	}
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 

	return xmlhttp; 
}

function existeArticulo() {
	var msj          = document.getElementById('MsjVentas');
	var art_a_buscar = document.getElementById('Articulo').value;
	var mostrador    = document.getElementById('mostrador');

	if(document.getElementById(art_a_buscar) == undefined) {
		
		var ajax=nuevoAjax();
		ajax.open("POST", "/Libreria/tienda.ajax.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send("accion=ExistenciaDeArticulo&IdArticulo="+art_a_buscar);
		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				var resultado = ajax.responseText;
				if(resultado=='existente') {
					var articuloId  = document.createElement('div');
					articuloId.id=art_a_buscar;
					mostrador.appendChild(articuloId);
					alert('existe');
					return true;
				}
				else {
					msj.innerHTML   = 'no existe indio pasmado';
					alert('no existe');
					return false;
				}
			}
		}
	}
	else {
		alert('ya existe objeto');
		return true;
	}
}

function buscarArticulo() {
	var button       = document.getElementById('buscar__');
	var art_a_buscar = document.getElementById('Articulo').value;
	button.disabled  = true;
	
	if(existeArticulo()) {
		alert('entre');
		
		if(document.getElementById('Unidades_'+art_a_buscar) == null) {
			var unidades  = 9;
			var descuento = 0;
			alert('entre1');
		}
		else {
			alert('entre2');
			var unidades  = document.getElementById('Unidades_'+art_a_buscar).value;
			alert(unidades);
			var descuento = document.getElementById('Descuento_'+art_a_buscar).value;
			alert(descuento);
		}
		
		var ajax=nuevoAjax();
		ajax.open("POST", "/Libreria/tienda.ajax.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send("accion=CargarArticulo&IdArticulo="+art_a_buscar+"&Unidades="+unidades+"&Descuento="+descuento);
		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				var articuloId       = document.getElementById(art_a_buscar);
				articuloId.innerHTML = ajax.responseText;
			}
		}		
	}
	button.disabled = false;
	return false
}
</script>
Ahora el unico problema es que la primera vez que ocurre el evento, cuando se crea el objeto, existeArticulo() debe retornar true, pero no sucede, retorna true

Los alert me indican que todo ocurre como debe, solo no se porque no retorna true
  #10 (permalink)  
Antiguo 08/05/2009, 17:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: JavaScript solo puede abrir una vez un documento?

no he visto tu ultimo codigo, me voy a basar en el codigo de tu primer post. el problema es que el return true dentro del evento onreadystatechange no afecta a la funcion existeArticulo. es decir, cuando el evento retorna true, este valor se lo devuelve al objeto ajax. significa que la funcion existeArticulo devuelve false o undefined.

intentalo de esta forma. cuando el articulo existe en la peticion que devuelve 'existente', llama la funcion buscarArticulo.
Código:
function nuevoAjax(){ 
var xmlhttp=false; 
try { 
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
}catch(e){ 
	try{ 
	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
	} catch(E) { xmlhttp=false; }
}
if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 
return xmlhttp; 
}

function existeArticulo() {
	var msj          = document.getElementById('MsjVentas');
	var art_a_buscar = document.getElementById('Articulo').value;
	var mostrador    = document.getElementById('mostrador');

	if(document.getElementById(art_a_buscar) == undefined) {
		
		var ajax=nuevoAjax();
		ajax.open("POST", "/Libreria/tienda.ajax.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send("accion=ExistenciaDeArticulo&IdArticulo="+art_a_buscar);
		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				var resultado = ajax.responseText;
				if(resultado=='existente') {
					var articuloId  = document.createElement('div');
					articuloId.id=art_a_buscar;
					mostrador.appendChild(articuloId);
					alert('existe');
					buscarArticulo();
				}
				else {
					msj.innerHTML   = 'no existe indio pasmado';
					alert('no existe');
				}
			}
		}
	}
	else {
		alert('ya existe objeto');
		return true;
	}
}

function buscarArticulo() {
var button       = document.getElementById('buscar__');
var art_a_buscar = document.getElementById('Articulo').value;
button.disabled  = true;
alert('entre');
		
	if(document.getElementById('Unidades_'+art_a_buscar) == null) {
	var unidades  = 9;
	var descuento = 0;
	alert('entre1');
	}else {
	alert('entre2');
	var unidades  = document.getElementById('Unidades_'+art_a_buscar).value;
	alert(unidades);
	var descuento = document.getElementById('Descuento_'+art_a_buscar).value;
	alert(descuento);
	}
		
	var ajax=nuevoAjax();
	ajax.open("POST", "/Libreria/tienda.ajax.php", true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send("accion=CargarArticulo&IdArticulo="+art_a_buscar+"&Unidades="+unidades+"&Descuento="+descuento);

	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			var articuloId       = document.getElementById(art_a_buscar);
			articuloId.innerHTML = ajax.responseText;
		}
	}		
	button.disabled = false;
	return false
}
  #11 (permalink)  
Antiguo 09/05/2009, 12:56
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

Buena idea!

Ahora solo llamo a la funcion existeArticulo() en vez de buscarArticulo()
  #12 (permalink)  
Antiguo 09/05/2009, 15:15
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

funciona a la maravilla!!!!!!! gracias zerokilled, fue ingenioso jaja, deberas no se como no se me habia ocurrido antes, ahora solo retocar cositas y hacer que se vea bonito y quitar esas alertas que como molestan xD, el codigo quedo asi:

Código HTML:
<script language="javascript">
function nuevoAjax()
{ 
	var xmlhttp=false; 
	try 
	{ 
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch(e)
	{ 
		try
		{ 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch(E) { xmlhttp=false; }
	}
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 

	return xmlhttp; 
}

function existeArticulo(art_a_buscar) {
	var button       = document.getElementById('buscar__');
	var msj          = document.getElementById('MsjVentas');
	var mostrador    = document.getElementById('mostrador');
	msj.innerHTML    = '';
	button.disabled  = true;

	if(document.getElementById(art_a_buscar) == undefined) {
	
		var ajax=nuevoAjax();
		ajax.open("POST", "/Libreria/tienda.ajax.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send("accion=ExistenciaDeArticulo&IdArticulo="+art_a_buscar);
		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				var resultado = ajax.responseText;
				if(resultado=='existente') {
					var articuloId  = document.createElement('div');
					articuloId.id   = art_a_buscar;
					mostrador.appendChild(articuloId);
					alert('existe');
					buscarArticulo(art_a_buscar);
				}
				else {
					msj.innerHTML   = 'no existe indio pasmado';
					alert('no existe');
				}
			}
		}
	}
	else {
		alert('ya existe objeto');
		buscarArticulo(art_a_buscar);
	}
	button.disabled = false;
}

function buscarArticulo(articulo) {
	if(document.getElementById('Unidades_'+articulo) == null) {
		var unidades  = 9;
		var descuento = 0;
		alert('entre1');
	}
	else {
		alert('entre2');
		var unidades  = document.getElementById('Unidades_'+articulo).value;
		alert(unidades);
		var descuento = document.getElementById('Descuento_'+articulo).value;
		alert(descuento);
	}
	
	var ajax=nuevoAjax();
	ajax.open("POST", "/Libreria/tienda.ajax.php", true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send("accion=CargarArticulo&IdArticulo="+articulo+"&Unidades="+unidades+"&Descuento="+descuento);
	
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			var articuloId       = document.getElementById(articulo);
			articuloId.innerHTML = ajax.responseText;
			alert('entre3');
		}
	}		
}
</script> 
  #13 (permalink)  
Antiguo 09/05/2009, 15:48
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

Ahora tengo un problema sencillo, nunca lo habia hecho, como vacio un campo tipo text;

he intentado:
document.getElementById(objeto).value = '';

pero no funciona xD
  #14 (permalink)  
Antiguo 09/05/2009, 15:53
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: JavaScript solo puede abrir una vez un documento?

ya lo arregle xD, supongo que fue por la forma que obtengo la variable
Estaba haciendo

function funcion (var) {
var.value = '';
}
  #15 (permalink)  
Antiguo 09/05/2009, 19:16
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: JavaScript solo puede abrir una vez un documento?

me alegro que lo tengas funcionando y que hayas podido resolver otros detalles.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:29.