我正在使用多页模板构建一个测试移动应用程序,但每次我从主页导航到搜索页面时,JQM 都会在同一个对象上增量注册相同的事件。
如果我在主页上并导航到搜索页面,则第一次 1 onclick 事件在 UL 中附加到我的“li a”,但如果我再次使用标准 JQM 后退按钮返回主页,并且再次单击搜索页面,在 UL 中的每个“li a”上注册了 2 个完全相同的事件。如果我第三次这样做,则有 3 个,依此类推......
相关搜索页面标记:
<div id="searchResults">
    <ul id="catResult" class="ui-listview" data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
        <li data-role="listdivider" data-theme="b">Search Categories</li>
    </ul>
</div>
搜索页面的 JQM 代码:
$('body').on('pagebeforeshow', '#searchPage', function(event){ // check if page is shown then execute code
    setScrollBar("show");
    buildCategoryList();
    setListMenuHeight(".ui-2col-layout .ui-2column-grid .ui-block-a", wHeight);
   // This event register is being registered multiple times
   $('#catList').on('click', 'li a', function(){
       var href = $(this).attr('href');
       var id = href.split('=');
       console.log('spLoadCategoryResults('+id[1]+')');
       spLoadCategoryResults(id[1]); // return results from database
    });    
    $("[data-rel=back]").click(function(){
                    // removes appended elements from the DOM is they exist
        cleanPage(['#catResult li','#locationMap #mapCanvas','#searchResults #spResult']); 
    });
    // DEBUG - shows how many times the event is registered
    var data = jQuery._data( catList, "events" );
    console.log(data);      
});
调试结果:
点击 [Object { type="click", origType="click", guid=306, more...}, Object { type="click", origType="click", guid=469, more...},对象 { type="click", origType="click", guid=537, 更多...}]
0
    Object { type="click", origType="click", guid=306, more...}
1
    Object { type="click", origType="click", guid=469, more...}
2
    Object { type="click", origType="click", guid=537, more...}
delegateCount
    3
remove
    [Object { type="remove", origType="remove", guid=210, more...}]
这些中的每一个都注册在“li a”上。