0

我想让它在曲目完成播放时自动调用一个javascript函数,该函数单击下一个曲目按钮,以便播放列表继续播放。到目前为止,我有:

function next() {
    $("#nextTrack").click();
}

但是当它被调用时似乎没有任何作用,有人知道我哪里出错了吗?

4

1 回答 1

2

click在 DOM 元素本身上触发事件的方法是:

$("#nextTrack")[0].click();

这将获取第一个(唯一)匹配的 DOM 元素(将其从 jQuery 包装器中删除)并调用本机click方法。

我可以为此提供的唯一理由是因为trigger没有(或在过去的版本中没有)尝试调用本机方法。我发誓在最新版本中,我可以使用.trigger("click")(same as .click()) 并且它会有效地单击元素...执行本地任何单击处理程序和 jQuery 处理程序。

triggerjQuery.on很棘手,因为 jQuery 将任何与,jQuery.bind等绑定的事件处理程序存储在一个特殊的地方。当原生事件被触发或被.trigger("event_name")使用时,所有这些特殊的处理程序都会被执行。但是由于某种原因,本机事件并不总是被触发(正如您似乎已经发现的那样)。我不确定是因为 jQuery 的版本还是事件类型。

更新:

发生这种情况的原因是因为 jQuery<a>在使用 时特别对待.trigger("event_name"),特别是针对click事件。

在对上面的东西喋喋不休之后,我决定研究trigger. 最后,调用原生 DOM 方法,使用elem[ type ]();. 但它只在某些条件下达到这一点......这些是条件(在其他嵌套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事件。

演示:这里基本上只是以更简单的方式模仿您的代码:http: //jsfiddle.net/EjVMY/ - 注意初始console.log加载时如何不执行(因为trigger)。但是,一旦您实际单击该事件,console.log它就会执行。我发现<a>用 a替换<div>会改变行为 - 它会在加载时登录。

当然,如果我一开始就用谷歌搜索,我会发现:触发对锚链接的点击

于 2013-04-12T15:46:59.093 回答