jQuery .click()适用于除Safari之外的所有浏览器

时间:2012-10-16 23:51:24

标签: javascript jquery safari click

我有一段JavaScript在现有div中动态创建A标记,然后在其上调用jQuery函数“click”。这适用于除Safari之外的所有浏览器。

Safari会返回以下错误:

  

'undefined'不是函数(评估'$('。shell a')[0] .click()')

关于我做错了什么或者为什么这在Safari中不起作用以及如何使其工作(或者在所有浏览器中都有效的一段代码)的任何想法我尝试过使用.trigger("click")同样也会出现同样的错误。

的JavaScript

function writeAndClickLink(url) {

    $('.shell').html('<a href="' + url + '"></a>');
    $('.shell a')[0].click();
}

并在HTML中:

<div class="shell"></div>

我这样做的原因很简单,就是从Flash网站调用这个函数来打开一个推特窗口,我在那里给予推文奖励。到目前为止,这是我可以将“tweet”事件绑定到窗口的唯一方法。如果我以任何其他方式打开窗口(例如window.open),它不捕获绑定事件,让我知道他们实际完成了推文。

流程如下:

  • 用户点击Flash中的推文按钮
  • Flash调用javascript函数动态编写href并“点击”它
  • Twitter窗口打开
  • 用户成功推文
  • 捕获Tweet事件并成功更新闪烁
  • 内容已在闪存中解锁

4 个答案:

答案 0 :(得分:34)

var a = $('.shell a')[0];
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('click', true, true, window);
a.dispatchEvent(evObj);

请参阅http://www.howtocreate.co.uk/tutorials/javascript/domevents(搜索“手动触发事件”)。

答案 1 :(得分:8)

Trevor Dixon的回答 修复了Safari,但即使是最新的Firefox也会出现问题:

  

TypeError:MouseEvent.initMouseEvent

的参数不足

在不破坏Firefox的情况下支持Safari的最佳方式是使用initEvent代替initMouseEvent,如下所示:

var element = document.getElementById('your_id_here');
if(element.click)
    element.click();
else if(document.createEvent)
{
    var eventObj = document.createEvent('MouseEvents');
    eventObj.initEvent('click',true,true);
    element.dispatchEvent(eventObj);
}

要更新2016年,应使用MouseEvent代替不推荐使用的initMouseEvent

var eventObj = new MouseEvent("click", {
    bubbles: true,
    cancelable: true
});
element.dispatchEvent(eventObj);

答案 2 :(得分:6)

$('.shell a')[0]从jQuery对象中获取DOM对象。该DOM对象只有DOM方法(不是jQuery方法),并且在.click()元素上没有行业标准<a>方法,直到HTML5并且尚未在每个浏览器中实现 - 因此您将看到不完整的实现跨越不同的浏览器。

你有几个选择。第一个选项获取jQuery对象并在jQuery对象上使用.click()方法。这只有在你触发jQuery点击处理程序时才能可靠地工作,而不是你只想要<a>标签的默认点击。

function writeAndClickLink(url) {

    $('.shell').html('<a href="' + url + '"></a>');
    $('.shell a').eq(0).click();
}

或者,如果点击URL只是要转到新的网页,不要打扰修改DOM,只需设置window.location,因为如果你&#,根本不需要修改DOM。 39;重新进入一个新的网页:

function writeAndClickLink(url) {
    window.location = url;    
}

答案 3 :(得分:3)

$('.shell a')[0]返回本地DOM元素,该元素没有绑定到它的jQuery方法

删除“[0]”以保留jQuery对象以使用jQuery方法

 $('.shell a').click()