动态的直播活动数量

时间:2011-03-31 20:35:53

标签: jquery tags scope

我在实现动态数量的.live()事件时遇到问题。

有一个循环可以确定从ajax调用返回的链接数量。

基本上我得到3(-1,0,[object Object])中的1个,这取决于我如何传递直播事件中的页数。

以下是现在的情况,每个直播活动只返回0。要获得-1,我将删除contractPage声明并将其放在net.tsn.contract.log函数中,或者[object Object]我将在live的处理函数中传递页面。

for (var page=(contractId['pages']-1); page>=0; page--) {
    $("#jpgLinks").prepend("<span><a href='#' id='jpgLink"+page+"'><img src='img/JPG-Link_con-" + (page+1) + ".png' alt=''><br>Page " + (page+1) + "<\/a><\/span>");
    var contractPage = contractId['contract'] + "-" + page;
    $('#jpgLink'+page).live('click', function() {
        showWorkingDialog();
        net.tsn.contract.log(contractPage, "DOWNLOAD_JPG", '<?php echo $_GET['lead']; ?>');
    });
}

2 个答案:

答案 0 :(得分:0)

这是3个条件中的每一个的代码:

-1

for (var page=(contractId['pages']-1); page>=0; page--) {
    $("#jpgLinks").prepend("<span><a href='#' id='jpgLink"+page+"'><img src='img/JPG-Link_con-" + (page+1) + ".png' alt=''><br>Page " + (page+1) + "<\/a><\/span>");
    $('#jpgLink'+page).live('click', function() {
        showWorkingDialog();
        net.tsn.contract.log(contractId['contract'] + "-" + page, "DOWNLOAD_JPG", '<?php echo $_GET['lead']; ?>');
    });
}

0:

for (var page=(contractId['pages']-1); page>=0; page--) {
    $("#jpgLinks").prepend("<span><a href='#' id='jpgLink"+page+"'><img src='img/JPG-Link_con-" + (page+1) + ".png' alt=''><br>Page " + (page+1) + "<\/a><\/span>");
    var contractPage = contractId['contract'] + "-" + page;
    $('#jpgLink'+page).live('click', function() {
        showWorkingDialog();
        net.tsn.contract.log(contractPage, "DOWNLOAD_JPG", '<?php echo $_GET['lead']; ?>');
    });
}

和[object Object]:

for (var page=(contractId['pages']-1); page>=0; page--) {
    $("#jpgLinks").prepend("<span><a href='#' id='jpgLink"+page+"'><img src='img/JPG-Link_con-" + (page+1) + ".png' alt=''><br>Page " + (page+1) + "<\/a><\/span>");
    $('#jpgLink'+page).live('click', function(page) {
        showWorkingDialog();
        net.tsn.contract.log(contractId['contract'] + "-" + page, "DOWNLOAD_JPG", '<?php echo $_GET['lead']; ?>');
    });
}

答案 1 :(得分:0)

啊,我看到问题在这里。您需要设置一个闭包来为每个page事件关闭live()的值。

将此函数放在代码中的某个位置(在for循环之前):

function _contractPage(contractPage, page){
    return function(){
        contractPage = contractPage  + "-" + page;
        showWorkingDialog();
        net.tsn.contract.log(contractPage, "DOWNLOAD_JPG", '<?php echo $_GET['lead']; ?>');
    }
}

然后改变你的for循环:

for (var page=(contractId['pages']-1); page>=0; page--) {
    $("#jpgLinks").prepend("<span><a href='#' id='jpgLink"+page+"'><img src='img/JPG-Link_con-" + (page+1) + ".png' alt=''><br>Page " + (page+1) + "<\/a><\/span>");
    var contractFunc = _contractPage(contractId['contract'], page);
    $('#jpgLink'+page).live('click', contractFunc);
}

示例:http://jsfiddle.net/T8UjA/