创建一个javascript函数,使按钮单击

时间:2013-04-12 15:29:31

标签: javascript jquery

我想这样做,以便当曲目完成播放时,它会自动调用一个javascript函数,点击下一个曲目按钮,以便播放列表继续播放。到目前为止我有:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

trigger很棘手,因为jQuery会在特殊的地方存储与jQuery.onjQuery.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