我的代码出现问题,请先粘贴我的代码,大部分内容都不重要,只是它的上下文。
$("#navbar > a").click(function(event) {
$('#controls').show();
var currentNum = parseInt($(this).attr('class'), 10);
document.getElementById('pNum').innerHTML = "pg. " + (currentNum + 1);
event.preventDefault();
var t2 = ($(this).attr('id')).split("#");
var $tr = $(zip.file(localStorage.selected + "/" + t2[0]).asText());
document.getElementById('main').innerHTML = "";
$('#main').append($tr);
document.getElementById(t2[1]).scrollIntoView()
current = ($(this).attr('class'));
$(function() {
$("#main img").each(function() {
var imgPath = localStorage.selected + "/" + $(this).attr('src');
var imageData = zip.file(imgPath).asBinary();
$(this).attr('src', 'data:image/jpeg;base64,' + btoa(imageData));
});
});
$("#main a").click(function(event){
event.preventDefault();
var elems = ($(this).attr('href')).split("#");
var $path = $(zip.file(localStorage.selected + "/" + elems[0]).asText());
document.getElementById('main').innerHTML = "";
$('#main').append($path);
});
});
现在底部的点击事件只有在我把它放在创建内容的代码中才有效,这不应该是这种情况,其次它只能工作一次,在我第一次拒绝它之后工作,有什么建议吗?
答案 0 :(得分:4)
听起来您想要使用event delegation。例如:
$(document).on('click', '#main a', function(event){
event.preventDefault();
var elems = ($(this).attr('href')).split("#");
var $path = $(zip.file(localStorage.selected + "/" + elems[0]).asText());
document.getElementById('main').innerHTML = "";
$('#main').append($path);
});
问题是$('#main a').click(...)
方法要求绑定点击处理程序时页面上已存在#main a
个元素。
事件委托允许您侦听文档(或任何其他始终存在的元素)上的单击事件,并查看该事件是否源自#main a
元素。这允许您动态添加/删除元素,而无需担心哪些元素已经绑定或者没有绑定点击处理程序。
答案 1 :(得分:2)
之前我遇到过这个问题,您是否尝试过使用此功能?:
$("<element id>").on( 'click', this, function ()
{
// Your code here
}
编辑*对不起之前没有看到答案(上面的答案中有更好的解释) - 但我会留下我的参考。