带有类选择器的jQuery click事件只触发一次

时间:2013-10-25 03:57:42

标签: javascript jquery jquery-selectors flowplayer

我正在使用分类链接来更改FlowPlayer内容。这是一个工作版本:http://jsfiddle.net/r9fAj/

在我使用相同代码的实际页面中,点击的第一个链接工作正常。第二个根本不会触发点击功能。即使我注释掉除了console.log()之外的所有东西......

$('.playerLink').click( function() {
    audioPlayer.unload();
    initAudioPlayer();
    $('#player').css('display', 'block');
    $('#player').animate({"height":"50px"}, 1000);
    var newClip = {'url':$(this).attr('ajax-data'),'autoplay':true};
    audioPlayer.play(newClip);
    console.log('playing ' + $(this).attr('ajax-data'));
});

HTML就像这样

<a href="#" ajax-data="/audio/episodes/09_27_2013_Happy_Hour_88509726.mp3" class="playerLink">Listen</a>
<a href="#" ajax-data="/audio/episodes/10_04_2013_Happy_Hour_3478965.mp3" class="playerLink">Listen</a>

<a id="flowplayer" href="/audio/episodes/09_27_2013_Happy_Hour_88509726.mp3"></a>

播放器初始化如下:

var audioPlayer;

var initAudioPlayer = function () {
    $f("flowplayer", "/player/flowplayer-3.2.16.swf", {
        plugins: {
            controls: {
                fullscreen: false,
                autoHide: false,
            }
        },
        clip: {
            autoPlay: false,
            url: "",
        }
    });

    audioPlayer = $f();
};
initAudioPlayer();

由于jsFiddle一遍又一遍地工作,我假设我的页面中的其他内容阻止第二次click()工作,但控制台没有错误。

所以我的问题是,如果没有发布整个网站的代码,我该如何进行调试?

2 个答案:

答案 0 :(得分:0)

因此,听起来您的.click()事件处理程序仅针对您单击的第一个链接而不是针对其他点击触发。对于一般调试,您可以使您的页面无效,并逐步注释掉/删除JS和HTML的其他部分,直到您能够使其正常工作。或者从最小量工作(小提琴)开始,然后逐渐添加其余部分以查看它何时停止工作。

答案 1 :(得分:0)

所以这是我所做的第一个网站,其中内容通过AJAX传递,内部链接被

捕获
 $("a:not([href^='http://'])").click( function(e) { 
    var url = $(this).attr("href");
    var title = ($(this).attr("title")) ? ': ' + $(this).attr("title") : '';
    e.preventDefault(); 
    if(url!=window.location){
       window.history.pushState({path:url},title,url);
       $('#contentMain').load(url);
        document.title = "It's New Orleans" + title;   
    }
});

出于某种原因,它可以一次点击与该类的链接,但第二次得到preventDefault()ed。

<a href="#" ajax-data="/audio/foo.mp3" class="playerLink">Listen</a>

修复是将[href^='#']添加到not()例如

$("a:not([href^='http://'],[href^='#'])").click( function(e) {

相关问题