steven026 发表于 2022-8-16 22:27
document.querySelector("#category > select.category-select.category-level-1").value="10"
或
documen ...
jquery的那个事件委托确实没有绑定在select
关于怎么调试可以在设置一个dom插入断点然后回溯
可以看到dispatch函数
dispatch: function(e) {
e = ct.event.fix(e);
var n, r, i, o, a, s = [], u = ot.call(arguments), l = (ct._data(this, "events") || {})[e.type] || [], c = ct.event.special[e.type] || {};
if (u[0] = e,
e.delegateTarget = this,
!c.preDispatch || c.preDispatch.call(this, e) !== !1) {
for (s = ct.event.handlers.call(this, e, l),
n = 0; (o = s[n++]) && !e.isPropagationStopped(); )
for (e.currentTarget = o.elem,
a = 0; (i = o.handlers[a++]) && !e.isImmediatePropagationStopped(); )
(!e.namespace_re || e.namespace_re.test(i.namespace)) && (e.handleObj = i,
e.data = i.data,
r = ((ct.event.special[i.origType] || {}).handle || i.handler).apply(o.elem, u),
r !== t && (e.result = r) === !1 && (e.preventDefault(),
e.stopPropagation()));
return c.postDispatch && c.postDispatch.call(this, e),
e.result
}
},
因为混淆过
我们看个大概就好了
i = o.handlers[a++]
从o拿handlers
而o来自于
o = s[n++]
s则来自于s = ct.event.handlers.call(this, e, l)
调试handlers可以知道
for (o = [],
a = 0; u > a; a++)
i = n[a],
循环来自u变量
u来自于
u = n.delegateCount
n来自于传入的函数
那么我们继续看传入的l
l = (ct._data(this, "events")
还是换汤不换药
根据https://bbs.tampermonkey.net.cn/thread-1250-1-1.html
确定一下this是哪个dom元素
document.querySelector("#category > select.category-select.category-level-1").selectedIndex=2
ddd=document.querySelector('.wgt-category')
$._data(ddd,'events').change[0].handler()
直接干爆
相当于基于jq做了一层简易的过滤封装