mi forma normal de realizar Javascript transforma en una gran cantidad de elementos en medio de jQuery:HTML: proceso de carga de elementos no corporales
<div class="cow"></div>
<script> $(".cow").doStuff() </script>
Sin embargo, esta operación es frágil y quebradizo: funciona en el supuesto de que la página está todo cargado solo una vez Una vez que comienzas a entrar en Ajax y recargas parciales, este tipo de transformación global se rompe por completo. Tampoco funciona si el servidor desea hacer una transformación diferente para cada elemento en función de algunos datos del lado del servidor.
Sé que el evento real onload
para elementos que no son body
no funciona. Una solución es dar a todos los identificadores de elementos/clases y hacer referencia a ellos a usar inmediatamente JQuery:
<div id="cow"></div>
<script> $("#cow").doStuff() </script>
Sin embargo, es muy sucia; No me gusta nada, en parte porque cada elemento que doy una ID contamina el espacio de nombres global I. Actualmente estoy dando al elemento una identificación efectivamente no colonable.
<div id="id877gN0icYtxi"></div>
<script> $("#id877gN0icYtxi").doStuff() </script>
según los números aleatorios de base64. Sin embargo, todo esto parece un truco gigante: puedo dar los elementos onclick
sy onmousedown
sy muy simplemente usando sus respectivos atributos, que luego llaman a una función para transformar el this
dado.
Ahora, sé que onload
no funciona. Sin embargo, ¿hay alguna forma de simular su funcionalidad? Específicamente, deseo poder ejecutar el código de JavaScript haciendo referencia a una etiqueta en particular usando this
sin tener que asignarles una identificación.
EDIT: Básicamente quiero algo así como
<input onclick="alert('moo')"/>
pero para alcrear; mi caso uso actual es para llenar un input
o textarea
con el texto, y actualmente estoy haciendo:
<input id="id877gN0icYtxi"/>
<script>$("#id877gN0icYtxi").val(...)</script>
donde el ...
es diferente para cada cuadro de entrada, y por lo tanto no se puede hacer fácilmente con un "global" jQuery transformar . Por otro lado, no puedo simplemente configurar el value
o el atributo input
cuando lo creo, ya que puede ser un textarea
, y no lo sé. Quiero hacer algo como:
<input onload="$(this).val(...)"/>
Lo que no funciona, pero ojalá lo hiciera. De nuevo, el ...
es establecido por el servidor y diferente para cada etiqueta input
en la página.
Edit2:
yo soy muy consciente de hora jQuery se suele utilizar para hacer todo el documento se transforma en una gran cantidad de elementos de la misma manera. El problema es que en este caso, cada elemento se está transformando de una manera específica para ese elemento, dictado por el servidor. El caso de uso específico es que cada campo tiene sus contenidos precompletados por $().val()
, y naturalmente cada campo se rellenará con diferentes contenidos. Darle a cada elemento un ID único y usar JQuery para hacer una búsqueda global para encontrar ese elemento de nuevo parece una manera increíblemente indirecta de hacer las cosas, y por supuesto se rompe cuando comienzas a Ajaxing partes de tu página dentro y fuera.
Edit3:
En resumen, quiero ser capaz de escribir
<div onload="javascriptFunction(this)"/>
y han javascriptFunction()
ejecutar en cuando se crea el <div>
(ya sea en la página inicial o inserta a través de AJAX) y pasar el <div>
como parámetro. Al igual que onclick
se ejecutaría javascriptFunction()
con <div>
como parámetro cuando se hace clic en el div, quiero que ocurra lo mismo, pero cuando se crea/inserta el <div>
en el DOM.
Estoy dispuesto a aceptar cualquier cantidad de scripts de configuración en el <head>
para que esto suceda. Por las razones mencionadas anteriormente, no estoy dispuesto a agregar ninguna etiqueta <script>
después del <div>
, o para agregar un class
o id
al <div>
. Dadas estas limitaciones, ¿qué es lo mejor que se puede hacer para simular un atributo onload
para elementos que no son del cuerpo?
No recibas tu pregunta .. –
¿Cómo exactamente quieres identificar la etiqueta que intentas abordar? Hay varias maneras de traducir sus criterios en código, pero para ayudarlo a descubrir el código, primero debemos conocer su criterio. – dragon
Esto http://docs.jquery.com/Plugins/livequery dice hacer lo que quieras: "Live Query también tiene la capacidad de activar una función (devolución de llamada) cuando coincide con un elemento nuevo y otra función (devolución de llamada) para cuando un elemento ya no se corresponde ". No lo he probado yo mismo. –