我想这样做,以便当曲目完成播放时,它会自动调用一个javascript函数,点击下一个曲目按钮,以便播放列表继续播放。到目前为止我有:
function next() {
$("#nextTrack").click();
}
但是当它被调用时似乎没有做任何事情,任何人都知道我哪里出错了?
答案 0 :(得分:2)
在DOM元素本身上触发click
事件的方法是:
$("#nextTrack")[0].click();
这将匹配第一个(唯一的)DOM元素(将其从jQuery包装器中删除)并调用本机click
方法。
我可以为此提供的唯一原因是因为trigger
没有(或在过去的版本中)没有尝试调用本机方法。我发誓在最新版本中,我可以使用.trigger("click")
(与.click()
相同),它将有效地点击元素......执行本机任何点击处理程序和jQuery处理程序。
trigger
很棘手,因为jQuery会在特殊的地方存储与jQuery.on
,jQuery.bind
等绑定的所有事件处理程序。触发本机事件或使用.trigger("event_name")
时,将执行所有这些特殊处理程序。但由于某种原因,本机事件不是总是触发(因为你似乎已经发现)。我不确定是不是因为jQuery的版本或事件类型。
<强>更新强>
发生这种情况的原因是因为jQuery在使用<a>
时专门处理.trigger("event_name")
,特别是click
事件。
在对上述内容进行抨击后,我决定查看trigger
的jQuery源代码。最后,使用elem[ type ]();
调用本机DOM方法。但它只能在某些条件下达到这一点......这些是条件(在其他嵌套的if
语句中):
if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
我猜测具体来说,!(type === "click" && jQuery.nodeName( elem, "a" ))
部分是阻止它的原因,因为您定位的元素是<a>
,而它是click
事件。
DEMO:这里基本上只是以更简单的方式模仿您的代码:http://jsfiddle.net/EjVMY/ - 注意加载时的初始console.log
如何不执行(因为{ {1}})。但只要您实际点击该活动,trigger
就会执行。我发现用console.log
替换<a>
会改变行为 - 它会在加载时记录。
当然,如果我刚开始使用谷歌搜索它,我会发现:trigger a click on a anchor link