我有一段JavaScript在现有div中动态创建A
标记,然后在其上调用jQuery函数“click”。这适用于除Safari之外的所有浏览器。
Safari会返回以下错误:
'undefined'不是函数(评估'$('。shell a')[0] .click()')
关于我做错了什么或者为什么这在Safari中不起作用以及如何使其工作(或者在所有浏览器中都有效的一段代码)的任何想法我尝试过使用.trigger("click")
同样也会出现同样的错误。
function writeAndClickLink(url) {
$('.shell').html('<a href="' + url + '"></a>');
$('.shell a')[0].click();
}
并在HTML中:
<div class="shell"></div>
我这样做的原因很简单,就是从Flash网站调用这个函数来打开一个推特窗口,我在那里给予推文奖励。到目前为止,这是我可以将“tweet”事件绑定到窗口的唯一方法。如果我以任何其他方式打开窗口(例如window.open),它不捕获绑定事件,让我知道他们实际完成了推文。
流程如下:
答案 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)
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()