我在实现动态数量的.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']; ?>');
});
}
答案 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);
}