/ / Evento jQuery Bubbling sull'oggetto sbagliato - javascript, jquery, updatepanel, jquery-events

Evento jQuery Bubbling sull'oggetto sbagliato - javascript, jquery, updatepanel, jquery-events

Sono ancora un po 'nuovo per gli eventi di jQuery.

Sto cercando di scrivere in jQuery un wrapper / framework dell'Asp.NET UpdatePanel che tiene traccia automaticamente degli aggiornamenti asincroni di UpdatePanel.

Voglio essere in grado di fare qualcosa del genere

$("#myUpdatePanel").on("update", myFunc);

e farlo gestire con qualche handler this come UpdatePanel aggiornato. In realtà ho un po 'di lavoro.

Voglio anche essere in grado di eseguire una funzione esattamente una volta ogni volta che uno o più UpdatePanel si aggiornano.

$.updatePanel.on("update", myRunOnceFunc);

Questo è dove sto avendo problemi.

Ho definito il mio wrapper:

// wrap updatePanel reload functionality
$.updatePanel = (function () {
var prm;

var UpdatePanel = function () { };
UpdatePanel.prototype = { };

// initialize on $(document).ready()
$(function () {
prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm) {
prm.add_pageLoaded(function (s, e) {
$.each(e.get_panelsUpdated(), function () {
// call panel-specific update event handlers
$(this).trigger($.Event("update"));
});

// triggered once no matter how many panels were updated
$(UpdatePanel).trigger($.Event("update"));
});
}
});

return $(UpdatePanel);
})();

Quindi nel mio codice che utilizza $.updatePanel:

$(function() { $.updatePanel.on("update", myRunOnceFunc); });

Quello che sto trovando è quello myRunOnceFunc viene eseguito durante entrambi $(this).trigger($.Event("update")); e $(UpdatePanel).trigger($.Event("update"));.

Qualche idea, perché e come risolverlo?

risposte:

0 per risposta № 1

Ho capito cosa c'era che non andava.

Piuttosto che return $(UpdatePanel);, Avevo bisogno di chiamare return $(new UpdatePanel());. Quindi ho dovuto sostituire $(UpdatePanel).trigger(...) con $.updatePanel.trigger(...). Codice sotto:

// wrap updatePanel reload functionality
$.updatePanel = (function () {
var prm;

var UpdatePanel = function () { }
UpdatePanel.prototype = { };

$(function () {
prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm) {
prm.add_pageLoaded(function (s, e) {
$.each(e.get_panelsUpdated(), function () {
$(this).trigger($.Event("update"));
});

// triggered once no matter how many panels were updated
$.updatePanel.trigger($.Event("update"));
});
}
});

return $(new UpdatePanel());
})();