Как вызвать событие mouseenter программно через jquery - PullRequest
4 голосов
/ 08 декабря 2011

В моей html-структуре у меня есть один элемент привязки, к которому прикреплено событие плагина hoverIntent.

     $('a').hoverIntent(function(event){// some code to show popup;})

Всякий раз, когда я наведите курсор на тег привязки вручную, он выполняет некоторый вызов ajax, возвращает данные из сервиса и показывает всплывающее окно.

Я хочу вызвать указатель мыши / зависание / перемещение мыши (все, что может вызвать всплывающее окно) из кода (без каких-либо ручных действий)

Я пробовал базовые функции jquery, такие как

   $('selector').trigger('hover') and
   $('selector').trigger('mouseenter')

Но ничего не сработало. Возможно ли задействовать функцию наведения / мышки без вмешательства пользователя?

Ответы [ 8 ]

6 голосов
/ 18 марта 2013

Плагин hoverIntent jQuery использует события mouseenter и mousemove для определения, запускать или нет. Если вы просто запустите событие mouseenter, то ничего не произойдет из-за этого.

Сначала вам нужно вызвать событие mouseenter и указать позицию мыши. Затем вам нужно вызвать событие mousemove, включая позицию мыши.

Этот jsbin показывает пример. Если вы наведите курсор мыши на элемент «Наведите меня», не наведя курсор на зеленое поле, ничего не произойдет. Если вы наведите курсор на зеленое поле, чтобы сделать его красным, ссылка «hover me» будет работать позже. Чтобы запустить это программно без предварительного наведения зеленого флажка, используйте следующие вызовы:

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 голос
/ 08 декабря 2011

Читая источник этого плагина, он на самом деле должен срабатывать при срабатывании mouseenter. Вы пытались запустить его, используя следующий код?

$('selector').mouseenter();
1 голос
/ 08 декабря 2011

Вы всегда можете изменить свой код. Вместо:

$('a').hoverIntent(function(event){// some code to show popup;})

сделать:

function myFunc(event){// some code to show popup;}

$('a').hoverIntent(myFunc);

Затем вы можете просто вызвать myFunc напрямую, вместо того, чтобы пытаться «имитировать» событие DOM.

0 голосов
/ 08 декабря 2011

Без хуков 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); });

Подробнее см. документацию по initMouseEvent().

.
0 голосов
/ 08 декабря 2011

Правильный способ выполнения функции наведения jQuery:

$('selector').hover(
    function(){ //This function is called on mouseenter();
        //code
    },function(){ //This function is called on mouseleave();
        //code
});
0 голосов
/ 08 декабря 2011

Я не знаю, думаю, что вы действительно можете вызвать mouseenter.Это может быть более полезным для

$('selector').bind('focus', function(e) {
 //code
});

//Then do
$('selector').focus();
0 голосов
/ 08 декабря 2011

Не могли бы вы просто вызвать свой метод ajax из функции?Зачем вам использовать hoverIntent, если вы хотите, чтобы он вызывался из вашего собственного кода или я что-то упустил?

0 голосов
/ 08 декабря 2011

Вместо того, чтобы использовать анонимную функцию, вы можете просто сделать повторно используемую. Похоже, самый простой путь.

function doThat(event){
    // do some stuff
}

$('a').hoverIntent(doThat);

И когда вам нужно вызвать функцию, вы просто выполняете doThat().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...