/ / jQuery Подіювання по неправильному об'єкту - javascript, jquery, updatepanel, jquery-events

Подія jQuery, що розгортається на неправильному об'єкті - javascript, jquery, updatepanel, jquery-events

Я ще трохи новим для подій в jQuery.

Я намагаюся написати jQuery оболонкою / структурою Asp.NET UpdatePanel, яка автоматично відстежує оновлення Update Async.

Я хочу зробити щось подібне

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

і його запустіть якийсь обробник this як оновлений UpdatePanel. Насправді я трохи працює.

Я також хочу, щоб ви змогли запустити функцію рівно один раз в будь-який час одного або декількох UpdatePanels оновлень.

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

Тут я маю проблеми.

Я визначив свою обгортку:

// 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);
})();

Тоді в моєму коді, який використовує $.updatePanel:

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

Те, що я знаходжу, це те myRunOnceFunc біжить під час обох $(this).trigger($.Event("update")); і $(UpdatePanel).trigger($.Event("update"));.

Будь-які ідеї, чому і як це виправити?

Відповіді:

0 для відповіді № 1

Я зрозумів, що було неправильно.

Замість цього return $(UpdatePanel);, Мені потрібно було зателефонувати return $(new UpdatePanel());. Потім мені потрібно було замінити $(UpdatePanel).trigger(...) з $.updatePanel.trigger(...). Код нижче:

// 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());
})();