jquery trigger('mouseenter')在tampermonkey中无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery trigger('mouseenter')在tampermonkey中无效相关的知识,希望对你有一定的参考价值。

在console里面是可以用trigger('mouseenter')触发的,用mouseenter()、mouseover()也行,但是把一样的语句写进tampermonkey里面就无效了,trigger('click')就无问题。

参考技术A 因为你调用的时候,页面还没有载入元素,报空。追问

我放在$(document).ready()里面了 $(window).load()也试过,而且用$("对应元素").length也能追踪到,就是mouseenter不触发

参考技术B 你把这255分给我发个远程我帮你写好得了,我缺点积分.追问

就是斗鱼直播,有个抢宝箱,原来只要模拟click就行,现在必须触发了mouseenter之后click才有效,在控制台mouseenter之后click是有效的,写到tampermonkey之后就失效了。你可以去试试,能解决再给你255也行

如何获取 JQuery.trigger('click');启动鼠标点击

【中文标题】如何获取 JQuery.trigger(\'click\');启动鼠标点击【英文标题】:How to get JQuery.trigger('click'); to initiate a mouse click如何获取 JQuery.trigger('click');启动鼠标点击 【发布时间】:2014-01-22 14:44:34 【问题描述】:

我很难理解如何使用 JQuery 模拟鼠标点击。有人可以告诉我我做错了什么。

HTML:

<a id="bar" href="http://***.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>

jQuery:

jQuery('#foo').on('click', function()
    jQuery('#bar').trigger('click');
);

演示:FIDDLE

当我点击按钮 #foo 时,我想模拟点击 #bar 但是当我尝试这样做时,什么也没有发生。我也试过jQuery(document).ready(function()...),但没有成功。

【问题讨论】:

jQuery trigger 仅在添加任何“jQuery click”事件时才有效。否则你将无法通过这种方式做任何事情; 这是浏览器内置的安全措施。请参阅@Blazemonger 的回答:***.com/questions/7999806/… @san.chez 有趣,感谢您提供的信息,以前不知道此安全措施! 【参考方案1】:

就用这个吧:

$(function() 
 $('#watchButton').trigger('click');
);

【讨论】:

【参考方案2】:

你只需要在做.click()之前放一个小的超时事件 像这样:

setTimeout(function() $('#btn').click(), 100);

【讨论】:

如果您尝试在页面加载时模拟点击,则非常适合。 这也解决了我的问题,谢谢。其他解决方案都没有可靠地工作。我的代码显示了一个模式,然后模拟了一个选项卡上的点击。为什么需要延迟?为了安全起见,我不得不使用 500 毫秒。【参考方案3】:

可能有用:

调用触发器的代码应该事件被调用之后执行。

例如,我想在#expense_tickets 值更改时执行一些代码,以及在重新加载页面时执行

$(function()  

  $("#expense_tickets").change(function() 
    // code that I want to be executed when #expense_tickets value is changed, and also, when page is reload
  );

  // now we trigger the change event
  $("#expense_tickets").trigger("change");

)

【讨论】:

啊这也是我的问题!对为什么 trigger() 不起作用感到困惑。原来我在它调用的函数之上设置了触发代码——所以钩子实际上并没有到位。哇!【参考方案4】:

技术上不是这个问题的答案,但可以很好地使用已接受的答案 (https://***.com/a/20928975/82028) 为 jQuery ACF 字段上的选项卡创建下一个和上一个按钮:

$('.next').click(function () 
    $('#primary li.active').next().find('.acf-tab-button')[0].click();
);

$('.prev').click(function () 
    $('#primary li.active').prev().find('.acf-tab-button')[0].click();
);

【讨论】:

【参考方案5】:

试试这个对我有用的:

$('#bar').mousedown();

【讨论】:

【参考方案6】:

我已经尝试了前两个答案,直到我从文件输入元素中删除“display:none”之前它对我不起作用。 然后我恢复到 .trigger() 它也适用于 windows 的 safari。

所以结论,不要使用 display:none;要隐藏您的文件输入,您可以改用 opacity:0。

【讨论】:

【参考方案7】:

你需要使用jQuery('#bar')[0].click();to simulate a mouse click on the actual DOM element(不是jQuery对象),而不是使用.trigger() jQuery方法。

注意:DOM 级别 2 .click() 不适用于 some elements in Safari。您将需要使用一种解决方法。

http://api.jquery.com/click/

【讨论】:

使用它来单击 jQuery ACF 字段上的下一个选项卡: $('.next').click(function () $('#primary li.active').next().find ('.acf-tab-button')[0].click(); ); 谢谢。它适用于桌面。但在移动设备(android chrome)上却没有。有什么建议吗? 由于某种原因,这会破坏当前 URL 中的哈希值。 如果 这似乎不再起作用(在 Safari、Firefox 上测试)【参考方案8】:

这是 JQuery 行为。我不知道为什么会这样,它只会触发链接上的 onClick 函数。

试试:

jQuery(document).ready(function() 
    jQuery('#foo').on('click', function() 
        jQuery('#bar')[0].click();
    );
);

【讨论】:

一点也不刺激。 trigger() 旨在执行点击事件 JavaScript 部分。这与创建多次重复使用的function var() 非常相似。【参考方案9】:

查看我的演示:http://jsfiddle.net/8AVau/1/

jQuery(document).ready(function()
    jQuery('#foo').on('click', function()
         jQuery('#bar').simulateClick('click');
    );
);

jQuery.fn.simulateClick = function() 
    return this.each(function() 
        if('createEvent' in document) 
            var doc = this.ownerDocument,
                evt = doc.createEvent('MouseEvents');
            evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            this.dispatchEvent(evt);
         else 
            this.click(); // IE Boss!
        
    );

【讨论】:

我会将this.click(); 包裹在else if(this.click) 为什么要将字符串'click' 传递给simulateClick 函数?好像没用过。 @clayRay - 是的,我同意你的看法。它是多年前制作的,记住要根据参数进行动态化。但后来我只是试图做出当前需求的解决方案。感谢您的观察。【参考方案10】:

jQuery 的.trigger('click'); 只会在这个事件上触发一个事件,它也不会触发默认的浏览器动作。

您可以使用以下 JavaScript 模拟相同的功能:

jQuery('#foo').on('click', function()
    var bar = jQuery('#bar');
    var href = bar.attr('href');
    if(bar.attr("target") === "_blank")
    
        window.open(href);
    else
        window.location = href;
    
);

【讨论】:

【参考方案11】:

您无法使用 javascript 模拟点击事件。 jQuery .trigger() 函数只会在元素上触发一个名为“click”的事件,您可以使用 .on() jQuery 方法捕获该事件。

【讨论】:

“你不能用javascript模拟点击事件” - Yes you can. 错了……你可以用javascript/jquery模拟点击事件,你可以用.click捕获触发点击事件而不用。

以上是关于jquery trigger('mouseenter')在tampermonkey中无效的主要内容,如果未能解决你的问题,请参考以下文章

jquery中,.trigger('click');事件和.click();的应用是否同一个道理?

jquery中radio元素的trigger("change")不能触发的问题

JQuery中关于事件委托trigger自动执行的问题

jquery停止事件执行

小5聊jQuery基础之触发a标签的click事件无效的解决方法

jQuery事件