2013-10-21 49 views
0

这是我的代码..当我调用这个函数时,iScroll()在更改页面后的LI元素上添加了重复事件。在iScroll的LI元素上重复onClick事件

function collectionOffen(asseID, imgsInFile) { 
    $("#thelist").empty(); 

    // append image files into slider div.. 
    for (var imgPageCnt = 0; imgPageCnt <= imgsInFile; imgPageCnt++) { 
     var html = ""; 
     html += "<li id=" + imgPageCnt + ">"; 
     html += "<img src='" + preThmb + "'>"; 
     html += "</li>"; 

     $("#thelist").append(html); 

     funcPreImg = function() { 
      previewImageBackside(asseID); 
     } 

     document.getElementById(imgPageCnt).addEventListener("click", funcPreImg); 
    } 

    $("#thelist").listview("refresh"); 
    $.mobile.changePage("#collectionOfFiles", { 
     transition: "slide", 
     reverse: true 
    }); 
    var myScroll = new iScroll('wrapper'); 
} 

告诉我解决办法,如果任何..

+0

建议您以字母开头,而不是数字开头。 – Omar

回答

1

重复的事件是JQM一个共同的问题。

试试这个(untestet braincode):

$(document).on('pageinit', function() { 
    $("#thelist").empty(); 

    // append image files into slider div.. 
    for (var imgPageCnt = 0; imgPageCnt <= imgsInFile; imgPageCnt++) { 
     var html = ""; 
     html += "<li id='" + imgPageCnt + "' class='imgClass'>"; 
     html += "<img src='" + preThmb + "'>"; 
     html += "</li>"; 

     $("#thelist").append(html); 
    } 

    //is 'asseID' defined in this context? 
    $(document).on('click', '.imgClass', function (e) { 
     if(e.handled !== true) 
     { 
      previewImageBackside(asseID); 
      e.handled = true; 
     } 
    }); 

    $("#thelist").listview("refresh"); 
    $.mobile.changePage("#collectionOfFiles", { 
     transition: "slide", 
     reverse: true 
    }); 
    var myScroll = new iScroll('wrapper'); 
}); 

这应该只在页面初始化添加列表元素。

也改变了你的JavaScript函数到一个更好的和高性能的jquerycall。

你也有一个错字在"<li id='" + imgPageCnt + "'>",缺失报价

+0

当你评论iScroll(),然后代码工作正常。 iScroll添加了重复事件。 – Saurabh

+0

更新了我的示例,如果事件被处理,它将不会执行两次 – tronc

+0

您的解决方案不工作Tronc。 – Saurabh

0

我找到了解决方案。渲染图像后销毁iScroll对象。

例如: -
var myScroll = new iScroll('wrapper'); myScroll.refresh(); myScroll.destroy();

将myScroll作为静态变量来销毁对象。