Skip to content

It seems to have a bug when element' ancestor has a matched node. #25

@bencode

Description

@bencode

Example

<div class="item">
  <ul class="menu">
    <li>1</li>
    <li>2</li>
    <li class="item">3</li>
    <li class="item">4</li>
  </ul>
</div>
var menu = document.querySelector('.menu');
delegate(menu, '.item', 'click', function() {
  console.log('here')
});

Maybe Solution

function closest (element, selector, stop) {  // <----- add stop element
  while (element && element !== stop && element.nodeType !== DOCUMENT_NODE_TYPE) {
    if (typeof element.matches === 'function' &&
        element.matches(selector)) {
      return element;
    }
    element = element.parentNode;
  }
}
function listener(element, selector, type, callback) {
  return function(e) {
    e.delegateTarget = closest(e.target, selector, element);  // <------- +

    if (e.delegateTarget) {
        callback.call(element, e);
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions