在我的html结构中,我有一个锚标记元素,附加了hoverIntent插件事件。
$('a').hoverIntent(function(event){// some code to show popup;})
每当我手动悬停在锚标签上时,它会执行一些ajax调用并从服务中恢复数据并显示弹出窗口。
我想从代码触发mouseenter / hover / mousemove(任何可以带来弹出窗口的东西)(无需任何手动操作)
我尝试了基本的jquery函数,比如
$('selector').trigger('hover') and
$('selector').trigger('mouseenter')
但没有任何效果,是否可以在没有用户中断的情况下调用悬停/鼠标中心功能?
答案 0 :(得分:6)
hoverIntent
jQuery插件使用mouseenter
和mousemove
事件来确定是否触发。如果您只是触发mouseenter
事件,则不会发生任何事情。
您需要先调用mouseenter
事件并包含鼠标位置。然后你需要调用mousemove
事件,也包括鼠标位置。
此jsbin显示了该示例。如果你悬停“悬停我”项目而没有先悬停绿色框,则没有任何反应。你是否将绿色框格式化为红色,之后“悬停我”链接将起作用。要在不先悬停绿色框的情况下以编程方式触发此操作,请使用以下调用:
var e = $.Event('mouseenter'); e.pageX = 50; e.pageY = 50; $("#testing").trigger(e); var e2 = $.Event('mousemove'); e2.pageX = 50; e2.pageY = 50; $("#testing").trigger(e2);
答案 1 :(得分:1)
您可以随时重新考虑代码。而不是:
$('a').hoverIntent(function(event){// some code to show popup;})
做的:
function myFunc(event){// some code to show popup;}
$('a').hoverIntent(myFunc);
然后,您可以直接调用myFunc,而不是尝试“模仿”DOM事件。
答案 2 :(得分:1)
读取该插件的来源,实际上应该在触发'mouseenter'时触发。您是否尝试使用以下代码触发它?
$('selector').mouseenter();
答案 3 :(得分:0)
您可以只使用可重复使用的匿名函数,而不是使用匿名函数。这看起来是最简单的方法。
function doThat(event){
// do some stuff
}
$('a').hoverIntent(doThat);
无论何时需要触发该功能,您只需执行doThat()
。
答案 4 :(得分:0)
你不只是从函数中调用你的ajax方法吗?为什么你需要使用hoverIntent,如果你想从你自己的代码调用它或我错过了什么?
答案 5 :(得分:0)
我不知道您认为可以实际触发mouseenter
。
$('selector').bind('focus', function(e) {
//code
});
//Then do
$('selector').focus();
答案 6 :(得分:0)
执行jQuery悬停功能的正确方法如下
$('selector').hover(
function(){ //This function is called on mouseenter();
//code
},function(){ //This function is called on mouseleave();
//code
});
答案 7 :(得分:0)
如果没有jQuery钩子,您总是可以让浏览器真正完全模拟事件:
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent( 'mouseenter', false, false, window,
0, 1, 2, 3, 4,
false, false, false, false, 0, null );
$('selector')[0].dispatchEvent(evt);
// or, for multiple matched
$('selector').each(function(){ this.dispatchEvent(evt); });