Удобный для браузера способ симулировать щелчок якоря с помощью jQuery? - PullRequest
3 голосов
/ 12 ноября 2009

Я пытаюсь смоделировать щелчок по тегу привязки с помощью jQuery. Некоторое время я копался в StackOverflow и Google и не нашел ничего, что работало бы на всех браузерах, которые я тестирую. До сих пор я нашел это:

$(document).ready(function() {
 $.fn.fireEvent = function(eventType) {
     return this.each(function() {
         if (document.createEvent) {
             var event = document.createEvent("HTMLEvents");
             event.initEvent(eventType, true, true);
             return !this.dispatchEvent(event);
         } else {
             var event = document.createEventObject();
             return this.fireEvent("on" + eventType, event)
         }
     });
 };

  $('a').fireEvent('click');
});

Это вызовет событие щелчка в Safari, но не FireFox или версию IE, которую я тестировал. Итак, о могучие умы ТАК, что я делаю не так? Любое руководство будет с благодарностью.

Ответы [ 4 ]

3 голосов
/ 12 ноября 2009

Это должно работать ...

$(function() {

  fireClick($("a")[0]);

});

function fireClick(elem) {
  if(typeof elem == "string") elem = document.getElementById(objID);
  if(!elem) return;

  if(document.dispatchEvent) {   // W3C
    var oEvent = document.createEvent( "MouseEvents" );
    oEvent.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, elem);
    elem.dispatchEvent(oEvent);
  }
  else if(document.fireEvent) {   // IE
    elem.click();
  }    
}
3 голосов
/ 12 ноября 2009

Использование $('a').click();

1 голос
/ 19 декабря 2009

Я тестировал это в Chrome и Firefox, но у меня нет под рукой IE. Это должно работать прозрачно в большинстве сценариев.

$('a').live('click.simclick', function(event){
    var $a = $(event.target)
    setTimeout(function(){
        if (event.isPropagationStopped())
            return

        $('<form/>')
            .attr({
                method: 'get',
                target: $a.attr('target'),
                action: $a.attr('href')
            })
            .appendTo(document.body)
            .submit()

             // clean up in case location didn't change
            .remove()
    }, 0)
})

// test it
$('a').eq(0).click()
0 голосов
/ 11 марта 2013

Я использую этот подход. Кажется, работает хорошо.

$(function() {
    fireClick($("a"));
});

function fireClick (elem) {
    window.location = $(elem).attr('href');
}
...