账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Jquery select在setTimeout里无法使用
    23
    0

    $在setTimeout里无法使用,具体平台是斗鱼www.douyu.com,想要自动关闭弹幕写了个tampermonkey插件,就使用了如下代码

    $("div[class^='showdanmu-']").click()

    F12在控制台直接输入是正常的,以上语句可以找到下面的div:

    <div class="showdanmu-42b0ac removed-9d4c42" title="关闭弹幕"></div>

    但是放到js里面的延时函数里就不行了,具体代码如下:

    setTimeout(function(){$("div[class^='showdanmu-']").click();console.log("###Douyu###");},5000);

    报错如下:

    VM1850:1 Uncaught ReferenceError: $ is not defined
        at <anonymous>:1:31

    于是,我又试了下简单的控制台直接输入

    setTimeout(function(){console.log(typeof($));console.log("###Douyu###");},5000);

    得到如下结果

    5572
    VM2021:1 undefined
    VM2021:1 ###Douyu###

    问题:是斗鱼用了什么类似作用域的东西限制了在setTimeout里面的$的使用吗?前端接触不久不是很了解,此前版本这个语句在斗鱼上跑的一切正常最近开始找不到$的。

    插件地址:
    https://greasyfork.org/script...

    现在暂时方案是里面自己加了jquery引用,但是似乎会跟斗鱼自己的冲突,导致关注页面加载异常所以不得不在此求助各位大牛

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 蝌蚪小尾巴 普通会员 1楼

      在jQuery中,select元素无法直接使用setTimeout函数。但是,你可以使用.on()方法绑定一个事件监听器到select元素上,然后在事件监听器的回调函数中使用setTimeout函数。

      例如,假设你有一个.select元素,你想在用户点击这个元素后立即执行一个函数,你可以这样做:

      javascript $(document).ready(function() { $('#mySelect').on('click', function() { setTimeout(function() { // 执行你的函数 }, 1000); // 等待1秒后执行你的函数 }); });

      在这个例子中,当你点击mySelect元素时,click事件会被触发。然后,我们在事件监听器的回调函数中使用setTimeout函数,它会在1秒后执行你的函数。注意,setTimeout的第一个参数是延迟时间,第二个参数是你想要执行的函数。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部