Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浏览器友好的方式来模拟锚点击jQuery?_Jquery_Cross Browser_Click - Fatal编程技术网

浏览器友好的方式来模拟锚点击jQuery?

浏览器友好的方式来模拟锚点击jQuery?,jquery,cross-browser,click,Jquery,Cross Browser,Click,我正在尝试使用jQuery模拟对锚定标记的单击。我已经在StackOverflow和Google上搜索了一段时间,没有发现任何可以在我测试的所有浏览器上运行的东西。到目前为止,我发现: $(document).ready(function() { $.fn.fireEvent = function(eventType) { return this.each(function() { if (document.createEvent) { v

我正在尝试使用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版本。所以,哦,伟大的头脑,我做错了什么?任何指导都将不胜感激。

使用
$('a')。单击()

这应该可以

$(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();
  }    
}

我在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()
$('a').live('click.simclick',函数(事件){
var$a=$(event.target)
setTimeout(函数(){
if(event.isPropagationStopped())
返回
$('')
艾特先生({
方法:“get”,
目标:$a.attr('target'),
操作:$a.attr('href')
})
.appendTo(document.body)
.提交()
//清理以防位置没有改变
.删除()
}, 0)
})
//测试一下
$('a')。等式(0)。单击()

我使用这种方法。看起来不错

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

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

这将触发jQuery单击事件处理程序,不是吗?我相信您必须访问底层DOM元素才能正确触发事件。看我的答案。这是我尝试的第一件事。它在Safari 4或FireFox 3.0.11上都不起作用(对我来说)。-1已确认:这只会触发通过jQuery分配给锚的事件处理程序。它不会模拟用户单击链接。它没有重定向到HREF。从2012年到2013年,一定发生了一些变化,因为这对我来说非常有效,所以+1。只是尝试了一下。Mac上的Safari 4或FireFox 3.0.11都不受欢迎。所有警报都会被触发,但我正在测试的浏览器上都没有DOM click本身。好的,我已经更新了我的答案,以使用我在网上找到的一个实现W3C事件调度标准的函数。请在Firefox上试试这个,因为我不能。适用于Safari,但不适用于FireFox。FireBug的错误控制台中没有说明原因。我认为FireFox只是阻止了这种行为。它可能会将程序性点击链接视为某种安全风险。您试图实现的目标是什么?是让浏览器跟随链接还是触发其他事件?我正在尝试让浏览器跟随链接。这看起来太简单了,但我已经空了几个小时了,所以我想我应该把它贴在这里。美元('a')怎么样。单击(function(){location.href=this.href})。单击()?这有点傻,但很管用。这个问题的时机很有趣。另请参见@Josh的答案,了解如何在IE.Re Firefox中使用它(重复我在上一节中说过的内容),您无法使用
dispatchEvent
(迄今为止的所有FF版本)实现页面导航。虽然通常的“fire事件处理程序”+“bubble and repeat”在
dispatchEvent
中确实会发生,但Firefox不会导航到
href
属性中的url。看,这是一个错误。