JQM从不使用click事件的函数添加链接

时间:2011-08-22 17:21:26

标签: jquery jquery-mobile

有一个创建链接的函数(如果不存在)(获取新数据后的分页链接)

如果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);
              }
         });
    });
}

1 个答案:

答案 0 :(得分:0)

您可以使用.live()或更好的.delegate()将点击处理程序绑定到尚未添加到dom的元素。因此,当添加.paginate_button链接时,点击处理程序将起作用。

ya的一些文档:

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

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

这是一个jsperf,显示.delegate()的资源密集程度低于.live()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')是比$('[data-role = page]')快得多的选择器。使用id选择器使用快速的本机getElementById()函数,数据属性seelctor搜索页面上的所有元素以查看它们是否具有data-attribute。