UNPKG

doevisualizations

Version:

Data Visualization Library based on RequireJS and D3.js (v4+)

87 lines (74 loc) 2.89 kB
@page jQuery.event.pause jQuery.event.pause @parent jquerypp `jQuery.event.pause` adds the ability to pause and resume events. $('#todos').on('show', function(ev){ ev.pause(); $(this).load('todos.html', function(){ ev.resume(); }); }) Calling `event.pause()` works similar to [event.stopImmediatePropagation()](http://api.jquery.com/event.stopImmediatePropagation/) and stops calling other event handlers for the event. When `event.resume()` is called, it will continue calling events on event handlers after the 'paused' event handler. Pause-able events complement the [jQuery.event.default default] event plugin, providing the ability to easy create widgets with an asynchronous API. ## Limitations The element and event handler that the <code>pause</code> is within can not be removed before resume is called. ## Example The following example implements a `tabs` widget using [CanJS](http://canjs.us) which uses `jQuery.fn.triggerAsync` to hide the tab: can.Control("Tabs", { init : function (el) { $(el).children("li:first").addClass('active'); var tab = this.tab; this.element.children("li:gt(0)").each(function () { tab($(this)).hide() }) }, tab : function (li) { return $(li.find("a").attr("href").match(/#.*/)[0]) }, "li click" : function (el, ev) { ev.preventDefault(); var active = this.element.find('.active') old = this.tab(active), cur = this.tab(el); old.triggerAsync('hide', function () { active.removeClass('active') old.slideUp(function () { el.addClass('active') cur.slideDown() }); }) } }) Each tab panel contains a form to input data and has a `Dirtybit` control attached to it which keeps track if the form has been saved or not. When the form data changes and you go to another tab The `Saver` widget will pause the `hide` event and show a modal that allows you to save the form, or cancel to stay in the current tab. Saving the data will send a POST Ajax request and resume the event when it returns: can.Control("Saver", { }, { " hide" : function (el, ev) { if (el.hasClass('dirty')) { ev.pause() new Modal('#modal', { yes : function () { var save = $('<span>Saving</span>').appendTo(el); $.post("/update", el.serialize(), function () { save.remove(); el.trigger('set'); ev.resume(); }) }, no : function () { ev.resume(); }, cancel : function () { ev.preventDefault(); ev.resume(); } }) } } }); @demo jquerypp/event/pause/pause.html 300