MCPcopy
hub / github.com/dcloudio/mui / delegateFn

Function delegateFn

examples/hello-mui/js/mui.js:597–649  ·  view source on GitHub ↗
(element, event, selector, callback)

Source from the content-addressed store, hash-verified

595 var delegateFns = {};
596 //返回事件委托的wrap事件回调
597 var delegateFn = function(element, event, selector, callback) {
598 return function(e) {
599 //same event
600 var callbackObjs = delegates[element._mid][event];
601 var handlerQueue = [];
602 var target = e.target;
603 var selectorAlls = {};
604 for (; target && target !== document; target = target.parentNode) {
605 if (target === element) {
606 break;
607 }
608 if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {
609 break;
610 }
611 var matches = {};
612 $.each(callbackObjs, function(selector, callbacks) { //same selector
613 selectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));
614 if (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {
615 if (!matches[selector]) {
616 matches[selector] = callbacks;
617 }
618 }
619 }, true);
620 if (!$.isEmptyObject(matches)) {
621 handlerQueue.push({
622 element: target,
623 handlers: matches
624 });
625 }
626 }
627 selectorAlls = null;
628 e = compatible(e); //compatible event
629 $.each(handlerQueue, function(index, handler) {
630 target = handler.element;
631 var tagName = target.tagName;
632 if (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {
633 e.preventDefault();
634 e.detail && e.detail.gesture && e.detail.gesture.preventDefault();
635 }
636 $.each(handler.handlers, function(index, handler) {
637 $.each(handler, function(index, callback) {
638 if (callback.call(target, e) === false) {
639 e.preventDefault();
640 e.stopPropagation();
641 }
642 }, true);
643 }, true)
644 if (e.isPropagationStopped()) {
645 return false;
646 }
647 }, true);
648 };
649 };
650 var findDelegateFn = function(element, event) {
651 var delegateCallbacks = delegateFns[mid(element)];
652 var result = [];

Callers 1

mui.jsFile · 0.70

Calls 1

compatibleFunction · 0.70

Tested by

no test coverage detected