2009-03-03 27 views
8

Estoy agregando algo de HTML que contiene javascript.HTML adjunto que contiene javascript no se ejecuta, ¿cómo puedo hacer que se ejecute?

<td onclick="toggleDay('+data+',this,\'tue\');">T</td> 

y

<img src="img/cross.png" onclick="deleteAlarm('+data+');"> 

Estas dos piezas de código son en la gran cantidad de HTML que estoy añadiendo.

Funcionan bien si ya están allí cuando se carga la página, pero no cuando estoy anexando.

¿Qué sugieres que haga? ¿Se necesita alguna solicitud de tipo para que el DOM reinterprete el JavaScript después del apéndice o?

EDIT:

Sólo algo más de información, estoy con este problema, ya que estoy añadiendo un poco de materia con AJAX a la base de datos, y en el éxito que estoy añadiendo el html en donde tiene que estar . Casi de la misma manera que SO con los comentarios.

Edit2:

Incluso con toda la discusión al respecto, gracias por las respuestas, tengo trabajo.

Respuesta

4

lo haría así:

primero Añadir Identificación atribuye a su html:

<td id="toggleDayCell">T</td> 

<img src="img/cross.png" id="crossImg"> 

Entonces tiene Javascript que se ejecuta en el proceso de carga de la página y se une a los acontecimientos le' re interesado en.

En PrototypeJS, que podría tener este aspecto:

Event.observe(window, 'load', function(){ 
    if($('toggleDayCell')) { 
    Event.observe($('toggleDayCell'), 'click', function(event){ 
     //do stuff here 
    } 
    } 

    if($('crossImg')) { 
    Event.observe($('crossImg'), 'click', function(event) { 
     //do stuff here 
    } 
    } 
}); 

usando algo como Prototipo (o jQuery) es agradable, ya que se encarga de la compatibilidad entre navegadores.

1

Agregue el HTML al documento y luego agregue programáticamente el evento onclick al objeto.

Esta es la parte superior de mi cabeza, pero ... creo que se puede hacerlo de esta manera:

IE:

Object.onclick = someFuntion 

FF:

Object.addEventListener('click', someFunction); 
+0

¿Y cómo lo haces? – fmsf

0

Usted debe utilice addEventListener('click', /*...*/) en lugar de establecer onclick en innerHTML o lo que sea.

IE llama a addEventListener algo completamente distinto, por lo que tendrá que compensarlo también.

(Edit: IE llama attachEvent() Esperamos que esto sea de alguna utilidad..)

3

¿Está añadiendo el HTML a través de AJAX? Si es así, tendrá que evaluar manualmente() el JavaScript que está devolviendo. Usted puede envolver la respuesta en un div y hacer algo como esto:

wrapper.getElementsByTagName("script") 
// for script in wrapper... 
eval(script.innerHTML) 

Si está utilizando una biblioteca como prototipo sería mucho más simple que se puede pasar de la respuesta a los evalScripts método().

+0

Acabo de encontrar su publicación en una búsqueda desesperada de Google durante la noche. Usted resolvió mi problema. Te amo, hombre. – adolfojp

+0

+1 pero aún así dice que eval debe evitarse, ¿no es así? – fmsf

+0

Sí, pero no hay otra manera de ejecutar javascript en una respuesta ajax, al menos nadie que yo sepa. – robmerica

0

AJAX tiene algunos caprichos ... especialmente con IE. Ejemplo: no puede usar la propiedad innerHTML para insertar/actualizar nada en un elemento de tabla (en IE). Es mejor usar las funciones DOM para insertar/actualizar/eliminar nodos de elementos (o agregar manejadores de eventos). Puede usar la función eval() mencionada para ejecutar javascript cargado dinámicamente que modifique el documento utilizando objetos DOM.

Cuestiones relacionadas