2009-04-17 17 views

Respuesta

10

Puede puntear en el PageRequestManager endRequestEvent:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){}); 

O si se trata de control eventos que intenta adjuntar, puede usar jQuery live events.

Otra opción es hacer la delegación del evento manualmente. Es lo que el evento "en vivo" está haciendo bajo las sábanas. Adjunte el controlador de eventos al documento en sí, luego ejecute condicionalmente su método si el remitente del evento fue el elemento que espera.

$(document).click(function(e){ 
    if($(e.target).is(".collapseButton")){ 
     $(this).find(".collapsePanel").slideToggle(500); 
    } 
}) 
+0

gracias que funcionó, supongo que no es tan eficiente, pero es solo para esta página. – Blankman

+0

En realidad es muy eficiente. Si tiene controladores de eventos en cada fila de una grilla, esto tendrá solo un manejador de eventos para toda la grilla. Mejora aún más si tiene varios controladores de eventos para cada fila. Puede salir adelante con solo uno ... y nada que adjuntar a los nuevos registros creados manualmente o mediante devoluciones de datos parciales. – Mark

6

Supongo que por 'devolución de página parcial' estás trabajando en Asp.net.

Intente utilizar

Sys.Application.add_load(function() { }); 

Todavía debe ser capaz de utilizar todas las cosas normales jQuery dentro de esa func.

+0

Exactamente. Esa es exactamente la razón por la cual MS inventó ese evento de carga: sabían que estarían eliminando los elementos DOM después de devoluciones parciales, y necesitaban dar a los desarrolladores una única forma de hacer las cosas cuando la página está lista, independientemente de si se utilizan sofisticados paneles de actualización AJAX o no. – JPot

+0

Perfecto. Esto hizo el truco. Recién llamé a mis mismos métodos de configuración directamente y a través de este evento, y ahora funciona perfectamente. ¡Aclamaciones! –

0

Algunos elementos DOM se reemplazan cuando se hace una devolución de datos parcial, y por supuesto, los nuevos elementos perderán enlaces jQuery. Puede utilizar la clase ScriptManager para registrar un script que se ejecutará una vez finalizada la devolución de datos parciales (echar un vistazo here)

2

consulte las posibilidades de "en vivo" de jQuery 1.3 here. Puede agregar eventos a elementos futuros así como a elementos actuales en la página. Esto puede simplificar el código que necesitará para escribir.

+0

no estamos usando 1.3 so cnt 'use live. – Blankman

+1

Utilizamos eventos "en vivo" mucho, pero a veces no satisfacen las necesidades. Si está utilizando jQuery para manipular el DOM, tendrá que volver a manipularlo después de que se haya actualizado a través de la devolución de datos parcial. – Mark

+1

Puede lograr el mismo efecto de live haciendo manualmente la delegación de eventos. – Mark

0

La solución más elegante (usando jQuery 2.x) es la siguiente:

uso de "encendido" del evento. ¡Asegúrese de vincular el evento al documento y no al elemento en sí!

ejemplo Código:

$(document).on('click', 'div.messages', function() { 
    console.log('click on div.messages'); 
    return false; 
}); 

poner este código en document.ready por ejemplo.

Esto funciona incluso si div.messages se cambia o se crea dentro de un UpdatePanel. Y nunca se dispara dos o más veces a la vez.

Cuestiones relacionadas