2011-08-22 75 views
0

具有(獲取新數據後分頁鏈路)創建鏈接,如果不存在一個函數JQM從功能不使用點擊事件添加鏈路

我調用下面函數從控制器如果TOTAL_PAGES> 1

function add_pagination_div() { 
    data = '<div id="pagination_sec"><a style="display:block;width:100%;background:#EEEEEE;text-align:center;padding:10px 0;" page-number="1" class="paginate_button" href="#">Show More...</a></div>' 
    $(data).appendTo('[data-role=page]').trigger('create'); 
} 

它添加它來查看,但是然後點擊頁面上的事件將不起作用。

$(".paginate_button").click(function(event){ 
    event.preventDefault(); 
    var pnumb = $(".paginate_button").attr('page-number'); 
    var newValue = parseInt(pnumb) + 1; 
    $.ajax({ 
      type: "GET", 
      url: "/app/Place/more?page=" + pnumb + "&requested_action=index&listClass=placeList", 
      success: function(){ 
      $(".paginate_button").attr('page-number', newValue); 
      } 
    }); 
}); 

編輯


從控制器

data = '<div id="pagination_sec"><a style="display:block;width:100%;background:#EEEEEE;text-align:center;padding:10px 0;" data-page-name="index" data-list_name="peopleList" page-number="1" class="paginate_button" href="#">Show More...</a></div>' 

WebView.execute_js("add_pagination_div('#{data}');") 

再改腳本:

function add_pagination_div(linkData) { 
    $(linkData).appendTo('[data-role=page]').trigger('create'); 
    $(".paginate_button").click(function(event){ 
     event.preventDefault(); 
     var pnumb = $(".paginate_button").attr('page-number'); 
     var newValue = parseInt(pnumb) + 1; 
     var pageName = $(".paginate_button").attr('page-name') 
     var listName = $(".paginate_button").attr('data-list_name') 
     $.ajax({ 
       type: "GET", 
       url: "/app/Place/more?page=" + pnumb + "&requested_action=" + pageName + "&listClass=" + listName, 
       success: function(){ 
       $(".paginate_button").attr('page-number', newValue); 
       } 
     }); 
    }); 
} 
+0

在add_pagination_div()之後調用.click()?事件的順序可能會關閉;如果在div創建之前調用了點擊綁定,它將不會綁定任何東西。我會在add_pagination_div()中放入.click()。 – cmpolis

+0

cmpolis,你是正確的需要添加點擊add_pagination_div,但是我需要設置鏈接表單控制器,因爲在不同的視圖中重複使用它。但不知道如何做到這一點。更新的問題,以顯示我如何嘗試這樣做。 – pcasa

+0

我想我可以從控制器隱藏/顯示。 – pcasa

回答

0

您可以使用.live()或更好,但.delegate()綁定對尚未添加到dom的元素的點擊處理程序。所以當你的.paginate_button鏈接被添加時,點擊處理程序將起作用。

有些文檔爲雅:

http://api.jquery.com/delegate/

http://api.jquery.com/live/

此處給出了一個.delegate()降低資源損耗比.live()一個jsperf:http://jsperf.com/jquery-live-vs-jquery-delegate/15

所以$(".paginate_button").click(function(event){將變爲:

$("[data-role=page]").delegate('.paginate_button', 'click', function(event){ 

OR

$(".paginate_button").live('click', function(event){ 

注:這將是更好地使用僞頁面的ID在委託調用爲$(「#PAGE_ID」)是一個更快的選擇不是$('[數據-role =頁]')。使用id選擇器使用快速的本地getElementById()函數,數據屬性選擇器搜索頁面上的所有元素以查看它們是否具有數據屬性。