@whitesev/domutils 1.6.7 → 1.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -440,7 +440,7 @@ export class DOMUtilsEvent {
440
440
  const currentParam: EventListenerOptions | boolean = args1[startIndex];
441
441
  if (typeof currentParam === "boolean") {
442
442
  option.capture = currentParam;
443
- } else if (typeof currentParam === "object" && "capture" in currentParam) {
443
+ } else if (typeof currentParam === "object" && currentParam != null && "capture" in currentParam) {
444
444
  option.capture = currentParam.capture;
445
445
  }
446
446
  return option;
@@ -507,18 +507,24 @@ export class DOMUtilsEvent {
507
507
  // 目标函数、事件名、子元素选择器
508
508
  isRemoveAll = true;
509
509
  }
510
+ if (args.length === 5 && typeof args[4] === "function" && typeof filter !== "function") {
511
+ // 目标函数、事件名、回调函数、事件配置、过滤函数
512
+ filter = option as (
513
+ value: DOMUtilsEventListenerOptionsAttribute,
514
+ index: number,
515
+ array: DOMUtilsEventListenerOptionsAttribute[]
516
+ ) => boolean;
517
+ }
510
518
  elementList.forEach((elementItem) => {
511
519
  /* 获取对象上的事件 */
512
520
  const elementEvents: {
513
521
  [key: string]: DOMUtilsEventListenerOptionsAttribute[];
514
522
  } = Reflect.get(elementItem, DOMUtilsData.SymbolEvents) || {};
515
523
  eventTypeList.forEach((eventName) => {
516
- let handlers = elementEvents[eventName] || [];
517
- if (typeof filter === "function") {
518
- handlers = handlers.filter(filter);
519
- }
520
- for (let index = 0; index < handlers.length; index++) {
521
- const handler = handlers[index];
524
+ const handlers = elementEvents[eventName] || [];
525
+ const filterHandler = typeof filter === "function" ? handlers.filter(filter) : handlers;
526
+ for (let index = 0; index < filterHandler.length; index++) {
527
+ const handler = filterHandler[index];
522
528
  let flag = true;
523
529
  if (flag && listenerCallBack && handler.originCallBack !== listenerCallBack) {
524
530
  // callback不同
@@ -530,13 +536,20 @@ export class DOMUtilsEvent {
530
536
  flag = false;
531
537
  }
532
538
  }
533
- if (flag && listenerOption.capture !== handler.option.capture) {
539
+ if (
540
+ flag &&
541
+ typeof handler.option.capture === "boolean" &&
542
+ listenerOption.capture !== handler.option.capture
543
+ ) {
534
544
  // 事件的配置项不同
535
545
  flag = false;
536
546
  }
537
547
  if (flag || isRemoveAll) {
538
548
  elementItem.removeEventListener(eventName, handler.callback, handler.option);
539
- handlers.splice(index--, 1);
549
+ const findIndex = handlers.findIndex((item) => item === handler);
550
+ if (findIndex !== -1) {
551
+ handlers.splice(findIndex, 1);
552
+ }
540
553
  }
541
554
  }
542
555
  if (handlers.length === 0) {