我的代码有问题,让我先粘贴我的代码,大部分都不重要,只是上下文。
$("#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);
});
});现在底部的click事件只有当我把它放在创建内容的代码中时才能工作,这不应该是这种情况,第二,它只工作一次,在我第一次调用它拒绝工作后,有什么建议吗?
发布于 2013-04-11 02:19:54
听起来你想用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元素。这让你可以动态地添加/删除元素,而不用担心哪些元素已经绑定或还没有绑定点击处理程序。
发布于 2013-04-11 02:23:20
我以前遇到过这个问题,你试过用这个吗?:
$("<element id>").on( 'click', this, function ()
{
// Your code here
}参考:http://api.jquery.com/on/
编辑*抱歉之前没有看到答案(在上面的答案中有更好的解释)-但我会保留我的作为参考。
https://stackoverflow.com/questions/15933400
复制相似问题