!(data/attachment/forum/202208/16/173139omdddh8ztlj4u1mz.png)
哥哥这么猛么 Aileyu 发表于 2022-8-16 18:11
确实有用,辛苦大佬了,但是我在另一个链接里还是没用
https://jingyan.baidu.com/edit/content
这个链接 ...
我看了下源码里面用的是jQuery().val()
比如第一个请选择分类要选游戏/数码,游戏/数码的value="10"
然后可以试试
$("#category > select.category-select.category-level-1").val("10")
或者
document.querySelector("#category > select.category-select.category-level-1").value="10" steven026 发表于 2022-8-16 18:30
我看了下源码里面用的是jQuery().val()
比如第一个请选择分类要选游戏/数码,游戏/数码的value="10"
然后 ...
还是不行 steven026 发表于 2022-8-16 16:25
$("#category > select.category-select.category-level-1").val("10")
$("#category > select.category- ...
第二句如果用原生js该怎么写呢 本帖最后由 steven026 于 2022-8-16 22:45 编辑
Aileyu 发表于 2022-8-16 22:08
第二句如果用原生js该怎么写呢
document.querySelector("#category > select.category-select.category-level-1").value="10"
或
document.querySelector("#category > select.category-select.category-level-1").selectedIndex=2
或
document.querySelector("#category > select.category-select.category-level-1 > option:nth-child(3)").selected=true
然后
document.querySelector("#category > select.category-select.category-level-1").dispatchEvent(new Event("change",{bubbles:true}))
至于{bubbles:true},我猜这个事件是通过委托绑的不是直接绑在select上的,所以要冒泡才能触发
反正能触发就对了,具体原理问问大佬 @李恒道 吧,这个通过jQuery绑的事件我也一知半解
steven026 发表于 2022-8-16 22:27
document.querySelector("#category > select.category-select.category-level-1").value="10"
或
documen ...
太感谢了,问题终于解决了,第一次来这个论坛就这么多人热情回复 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") || {}) || [], c = ct.event.special || {};
if (u = 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) && !e.isPropagationStopped(); )
for (e.currentTarget = o.elem,
a = 0; (i = o.handlers) && !e.isImmediatePropagationStopped(); )
(!e.namespace_re || e.namespace_re.test(i.namespace)) && (e.handleObj = i,
e.data = i.data,
r = ((ct.event.special || {}).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
从o拿handlers
而o来自于
o = s
s则来自于s = ct.event.handlers.call(this, e, l)
调试handlers可以知道
for (o = [],
a = 0; u > a; a++)
i = n,
循环来自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.handler()
直接干爆
相当于基于jq做了一层简易的过滤封装
页:
1
[2]