2013-04-10 95 views
0

我的代码有问题,先让我的代码粘贴,其中大部分并不重要,只是它的上下文。调用onClick事件

   $("#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

为什么你有一个'document.ready'函数并绑定'$(“#navbar> a”)内的另一个点击事件处理程序,点击'处理程序 – 2013-04-10 18:21:20

+0

@wirey,正如我所说的,由于某种原因它是唯一的地方它作品。 – Crossman 2013-04-10 18:22:20

回答

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元素。这允许您即时添加/删除元素,而不用担心哪些元素已经或者还没有绑定点击处理程序。

+0

我尝试使用on()函数,但出于某种原因,它给了我同样的问题,因为click函数会清除div并添加新内容,而且似乎没有选择它。 – Crossman 2013-04-10 18:21:11

+0

如果你使用'$('#main a')。on('click',...)'你肯定会遇到同样的问题。 '$(document).on('click','#main a',...'另一方面,应该工作。 – jmar777 2013-04-10 18:23:52

+0

@Crossman是的..再次通过你的代码这应该解决你的问题,因为这是直接绑定到文档本身 – 2013-04-10 18:25:43

2

我以前有这个问题,你尝试过用这个?:

$("<element id>").on('click', this, function() 
{ 
     // Your code here 
} 

参考:http://api.jquery.com/on/

编辑*对不起没看到前一个答案(答案中更好的解释以上) - 但我会保留我的参考。