1

我正在尝试监听#top 上的点击,但是在使用 jQuery 加载 php 后它没有响应。我真的希望有人可以提供帮助,因为这是唯一无法通过谷歌搜索解决的问题。

这是jQuery / javascript:

function change(type, top, user){
    var ec = $('.entries-container');
    ec.load('load.php', {type: type, top: top, user: user});
}
$(document).ready(function(){
    $('.load').on('click', function(event) {
        event.preventDefault();
        var type = $(this).data('type'),
            top = '0';
        $('#top').data("current", type);
        change(type, top);
    });
    $('#top').on('click', function(event) {
        event.preventDefault();
        var data = $(this).data('current');
        change(data, data);
    });
    $('#top').on('click', function() {
        console.log('Yes');
    });
});

这是加载的 php 页面的输出:

echo '<div class="entry cf span4 ">';
echo '<div class="entry-img bd-all-green">';
echo '<img class="" src="video/' . $e['v_name'] . '_thumb.jpeg" alt="">';
echo '</div><div class="entry-text cf bg-green txt-white">';
echo '<p class="entry-type">Image</p>';
echo '<p class="entry-votes">Votes: <span>' . $e['v_votes'] . '</span></p></div>';
echo '<p data-id="' . $e['v_id'] . '" data-type="video" class="entry-btn bd-all-green txt-green"><span>Vote</span></p></div>';
4

2 回答 2

1

我认为问题可能在于 $(document).ready(function(){}); call 将在 DOM 首次准备好时将您的点击侦听器应用于 .load 和 #top 已分类/id'ed 元素,但“load.php”添加的 .load 和 #top 元素此时不在 DOM 中. 将你的听众抽象成一个可重用的函数怎么样?像这样的东西(用完成处理程序修改):

function change(type, top, user){
   var ec = $('.entries-container');
   ec.load('load.php',
           {type: type, top: top, user: user}, 
           function() { add_click_handlers(); });
}
$(document).ready(function(){
   add_click_handlers();
});

function add_click_handlers() {
    $('.load').on('click', function(event) {
        event.preventDefault();
        var type = $(this).data('type'),
            top = '0';
        $('#top').data("current", type);
        change(type, top);
    });
    $('#top').on('click', function(event) {
        event.preventDefault();
        var data = $(this).data('current');
        change(data, data);
    });
    $('#top').on('click', function() {
        console.log('Yes');
    });
}
于 2013-10-03T00:57:47.620 回答
0

您需要使用事件委托模型.on()来注册处理程序。

$('.load').on('click', '#top', function(event) {
    event.preventDefault();
    var data = $(this).data('current');
    change(data, data);
});
$('.load').on('click', '#top',function() {
    console.log('Yes');
});
于 2013-10-03T00:50:02.640 回答