我想让它在曲目完成播放时自动调用一个javascript函数,该函数单击下一个曲目按钮,以便播放列表继续播放。到目前为止,我有:
function next() {
$("#nextTrack").click();
}
但是当它被调用时似乎没有任何作用,有人知道我哪里出错了吗?
我想让它在曲目完成播放时自动调用一个javascript函数,该函数单击下一个曲目按钮,以便播放列表继续播放。到目前为止,我有:
function next() {
$("#nextTrack").click();
}
但是当它被调用时似乎没有任何作用,有人知道我哪里出错了吗?
click
在 DOM 元素本身上触发事件的方法是:
$("#nextTrack")[0].click();
这将获取第一个(唯一)匹配的 DOM 元素(将其从 jQuery 包装器中删除)并调用本机click
方法。
我可以为此提供的唯一理由是因为trigger
没有(或在过去的版本中没有)尝试调用本机方法。我发誓在最新版本中,我可以使用.trigger("click")
(same as .click()
) 并且它会有效地单击元素...执行本地任何单击处理程序和 jQuery 处理程序。
trigger
jQuery.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>
会改变行为 - 它会在加载时登录。
当然,如果我一开始就用谷歌搜索,我会发现:触发对锚链接的点击