上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12
返回列表 发新帖
楼主: Aileyu - 

求助大佬,怎么用js点击表单option

[复制链接]
  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    296

    主题

    3950

    回帖

    3858

    积分

    管理员

    积分
    3858

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-8-16 18:21:34 | 显示全部楼层

    steven026 发表于 2022-8-16 17:31

    [md]S20816-17260795.png[/md]

    哥哥这么猛么

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 647 天

    [LV.9]以坛为家II

    30

    主题

    536

    回帖

    1418

    积分

    荣誉开发者

    积分
    1418

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-8-16 18:30:55 | 显示全部楼层
    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"
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-10-4 02:13
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    6

    主题

    17

    回帖

    31

    积分

    助理工程师

    积分
    31
    发表于 2022-8-16 18:38:24 | 显示全部楼层
    steven026 发表于 2022-8-16 18:30
    我看了下源码里面用的是jQuery().val()
    比如第一个请选择分类要选游戏/数码,游戏/数码的value="10"
    然后 ...

    还是不行
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-10-4 02:13
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    6

    主题

    17

    回帖

    31

    积分

    助理工程师

    积分
    31
    发表于 2022-8-16 22:08:02 | 显示全部楼层
    steven026 发表于 2022-8-16 16:25
    $("#category > select.category-select.category-level-1").val("10")
    $("#category > select.category- ...

    第二句如果用原生js该怎么写呢
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 647 天

    [LV.9]以坛为家II

    30

    主题

    536

    回帖

    1418

    积分

    荣誉开发者

    积分
    1418

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-8-16 22:27:09 | 显示全部楼层
    本帖最后由 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绑的事件我也一知半解
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-10-4 02:13
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    6

    主题

    17

    回帖

    31

    积分

    助理工程师

    积分
    31
    发表于 2022-8-16 22:50:42 | 显示全部楼层
    steven026 发表于 2022-8-16 22:27
    document.querySelector("#category > select.category-select.category-level-1").value="10"

    documen ...

    太感谢了,问题终于解决了,第一次来这个论坛就这么多人热情回复
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    638

    主题

    5234

    回帖

    6105

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6105

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-8-16 23:51:19 | 显示全部楼层

    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做了一层简易的过滤封装

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表