Inicio | Pedro Santana |  RSS  Mi tumblelog  Mis photos  Mi CV

 

Pregunta a los expertos

Como se que entre mi lectores (pocos pero de calidad :) ) tengo varios expertos en JavaScript les dejaré una duda que tengo, voy a tratar de ser claro aunque no lo prometo :P

Bien el asunto va con el rollo de los eventos en JS, vamos a suponer que tengo el siguiente XHTML:

JAVASCRIPT [Show Plain Code]:
  1. <div id="texto">Texto inicial</div>
  2. <div id="formulario">
  3.   <form action="#" method="post" name="prueba">
  4.     <input type="button" value="Presiona" onclick="cambiaTexto();" />
  5.   </form>
  6. </div>
  7. <script type="text/javascript">
  8.   function cambiaTexto() {
  9.     document.getElementById(texto).innerHTML=Hola;
  10.   }
  11. </script>

Entonces lo que busco es un evento en JS que se ‘dispare‘ al momento que el texto en el <div id="texto"> cambie y despues de que ya se que cambió analizar el nuevo texto que contiene (esta última parte no hay problema).

En realidad el formulario y el JS estan a manera de demostración ya que el cambio de texto puede venir por ejemplo por medio de AJAX.

Ahora bien, hasta donde se no existe un evento para el ‘change‘ del DIV y aqui es donde busco sus sugerencias para generar alguna manera eficiente de hacerlo, tal ves poniendo un ‘timer‘ con JS en la página y que cada X segundos este revisando el DIV para analizar el texto, pero esto seria muy ineficiente…

11 comentarios en “Pregunta a los expertos”

 

Victor Bracco

Porque razón cambia el texto adentro del div?

pecesama

Victor no tanto el texto, si no el contenido, ya vez que con AJAX lo que te regresa el HTTPRequest se pone en un DIV, por eso quiero obtener un evento cuando ocurra un cambio en el DIV.

Victor Bracco

Y no es posible agregarlo al final de evento AJAX?

pecesama

No podria ser posible ya que no puedes controlar cuando ya se termino de procesar el archivo remoto, antes de la siguiente instruccion JS dentro de la misma llamada AJAX.

Necesito algo como lo siguiente:

Event.observe('textbox', 'keyup', ejecuta, false);

Donde le pones un ‘listener’ a un textbox para cuando ocurra el evento keyup y ejecute la funcion que se llama ejecuta.

Misael Monterroca

No se si aún te funcione pero acabo de leer tu post

Puedes utilizar el evento onpropertychange, mira

function Cambia()
{
divPrueba.innerHTML = “hola”;
}
function Cambia2()
{
divPrueba.innerHTML = “hola 2″;
}
function Cambio()
{
alert(‘hola’);
}

Misael Monterroca

Quitaron estas etiquetas

Y desde dos botones mande a llamar a la funcion Cambia()

pecesama

WordPress elimina las etiquetas, aqui lo pongo de nuevo lo que Misael escribio:


<html>
<script lang=JavaScript>
function Cambia()
{
divPrueba.innerHTML = "hola";
}
function Cambia2()
{
divPrueba.innerHTML = "hola 2";
}
function Cambio()
{
alert('hola');
}
</script>
<body>
<input type=button value="Prueba" onclick='Cambia();'>
<input type=button value="Prueba" onclick='Cambia2();'>
<div id="divPrueba" name="divPrueba" onpropertychange="Cambio();"></div>
</body>
</html>

pecesama

Ahora si mi comentario :D

Gracias Misael, no conocía ese evento y su funcionalidad es exactamente lo que andaba buscando :) pero hay un problema, solo es soportado por el IE :( así que no lo puedo utilizar en códice.

También en lugar de divPrueba.innerHTML te recomiendo usar el estándar del W3C document.getElementById('divPrueba').innerHTML en su lugar.

Saludos.

Misael Monterroca

Iep, desgraciadamente esos eventos son propietarios de IE :(

Gracias, suelo utilizarlo, aunque el demo que te mande lo realice solo como prueba de concepto :P

Wolfheart

Tengo una llamada a HTTPRequest, para obtener el contenido de una pagina que contiene , y HTML.

y necesito que eso sea volvado a una DIV, lo cual lo hago con div.innerHTML.. pero esto no me volca las funciones que estan contenidas en la pagina web inicial.

y las necesito porque deseo llamar a una de ellas para poder gatillar el despliege de información dentro de la misma div que contiene el HTML.

Pero a pesar de todos mis intentos esto no lo puedo hacer. Habia pensado en un iframe dentro de la div; pero no puedo volcar la info dentro del iframe.

podrían pegarme una ayudita.

Muchas gracias

 

Deja un comentario