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

Sco*_*ott 33 javascript safari jquery click

我有一段JavaScript,它A在现有div 中动态创建一个标签,然后在其上调用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();
}
Run Code Online (Sandbox Code Playgroud)

在HTML中:

<div class="shell"></div>
Run Code Online (Sandbox Code Playgroud)

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

流程如下:

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

Tre*_*xon 34

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

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

  • 这个答案在当时有用,但是不推荐使用`initMouseEvent`. (3认同)

Ale*_*x W 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);
}
Run Code Online (Sandbox Code Playgroud)

要更新2016年,MouseEvent应使用而不是initMouseEvent弃用的:

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


jfr*_*d00 6

$('.shell a')[0]从jQuery对象中获取DOM对象.DOM对象只有DOM方法(不是jQuery方法),并且在HTML5之前没有行业标准.click()方法<a>,而且还没有在每个浏览器中实现 - 因此你会看到不同浏览器的不完整实现.

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

function writeAndClickLink(url) {

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

或者,如果单击URL只是要转到新的网页,甚至不必修改DOM并只设置window.location,因为如果你只是去一个修改DOM就没有意义新网页:

function writeAndClickLink(url) {
    window.location = url;    
}
Run Code Online (Sandbox Code Playgroud)