2010-08-22 65 views
1

我使用下面的代码做一个表分页(请不要提出任何预建的)把它变成一个jquery函数?

function tablejax(url, start, count) { 
    $('#tablejaxButton').attr("disabled", "true"); 
    $('#tablejaxOverlay').fadeIn('slow'); 
    $.ajax({ 
     type: "GET", 
     url: url, 
     data: "start="+start+"&count="+count+"&identifier="+$('#tablejaxButton').val(), 
     success: function(data){ 
      setTimeout(function(){ 
       $('#myTable tbody').append(data); 
       $('#myTable tr td div').slideDown('slow'); 
       $("html:not(:animated),body:not(:animated)").animate({ 
        scrollTop: $('body').attr("scrollHeight") 
        }, 1000); 
       $("table").trigger("update"); 
      }, 1000); 
      setTimeout(function(){ 
       $('#tablejaxOverlay').fadeOut('slow'); 
       $('#tablejaxButton').removeAttr('disabled'); 
      }, 1000); 
     } 
    }); 
} 

但是我目前叫它通过

$('#tablejaxButton').click(function() { 
     tablejax(this.name, tcount, 20); 
     tcount = tcount+20; 
    }) 

有几个问题这, 但我想改变的是。

我希望能够调用$('#tableID').tablejax('url', 'identifier', 'count');
$('#tableUsers').tablejax('get_members.php', 27, 20);

它会自动onclick事件附加到#tableUsersButton(TABLEID +按钮)

我想本身的功能来保持跟踪我们应该从 目前我正在使用

tcount = 20; 
//do stuff 
tcount = tcount +20; 

这是不理想的。

最简单的方法是什么?

注:此功能应该是传递到它的count已经被加载到表中,例如,假设如果你调用$('#tableUsers').tablejax('get_members.php', 27, 20);那么第20行就已经可以通过服务器端处理加载到表中。


更新
为了简化我的问题。

我需要能够调用的文件准备$('#tableID).tablejax(--initial params here--);

这基本上会得到一个函数准备填写一些默认PARAMS(如标识,网址,ECT) 这也将增加对onclick事件处理器$('#tableIDButton'),当点击时会打电话像​​

这种方法是有时我需要使用另一个触发器调用分页。

所有我需要知道的是

  • 如何注册jQuery中的函数:回答
  • 如何注册当函数被调用回答的单击事件:原来我可以注册一个点击甚至从任何地方不只是文件准备
  • 如何在函数中调用一个'行动',当它不是初始调用 (初始呼叫应当使用的参数,后续调用应该调用“内部功能)

回答

2

使用延伸()函数的函数添加到jQuery对象:

jQuery.fn.extend({ 
    tablejax: function(url, start, count) { 
     $('#tableIDButton').click(function() { 
      $('#tableID').tablejax(url, start+20, count); // just pass on the variables 
     } 
    } // put comma here if you want to add more functions 
}); 
// to run the function on document ready: 
$(function() { 
    $('#tableID').tablejax(...); 
} 

然后,你应该能够像你想要的那样调用你的功能。您显然仍然需要在点击事件中调用它。

更新:

更新我的例子来回答问题2和3读取下一行,你可以再次递归调用相同的功能,比如上例中。

顺便说一句,我没有看到我的例子“如何污染jQuery命名空间”,因为它来自jQuery自己的文档。

+0

嗨那里, 这就近了。 但是我想在文档准备好时调用'$('#tableID')。tablejax(blablabla);' 。当我调用它时,它应该在'$('#tableIDButton')'上注册一个名为$('#tableID')。的table事件('next')。 这将抓住接下来的几行 – Hailwood 2010-08-22 23:40:02

+0

我可能是错的,但我总是被告知用自己的函数扩展jquery对象污染它,就好像你有内部函数(例如更新,删除,change_colour),他们可能会与其他人发生冲突,但是使用0xAF的方法你的内部函数就是这样,内部的。 另外,我真的不想每次都必须传递参数,因此为什么我想只能调用tablejax('next'); 我想我总是可以只用tablejax();如果没有参数,则使用在选项数组中传入的内容... – Hailwood 2010-08-23 00:25:33

+0

这里有两个问题。 1)不能有两个具有相同名称的函数,但具有不同的参数/实现。 2)'tablejax('next');'函数没有意义,因为它是在HTML元素上调用的,因此不会了解以前的任何查询。所以没有信息来计算接下来会发生什么。除非当然存储在按钮中,但是当您只需要下一行时,您需要给函数一个不同的名称。 – Stian 2010-08-23 00:37:52

3

我想这将帮助: http://www.google.bg/search?q=jquery+plugin+tutorial

basicly你会写是这样的:

(function($){ 
    $.fn.tablejax = function(options) { 
     this = $(this); // this is the element on which we called the func 
     this.tcount+=20; 
     // do something here... 
    } 
})(jQuery); 

这个保存到jquery.tablejax.js然后jquery.js和 后调用它的HTML
您需要实现该功能,然后您可以在每个元素或选择器上调用它。

+0

谢谢,这几乎正是我所需要的(并且在Stians答案上有所改进,因为它不会污染jquery命名空间) 请参阅我的更新以获得其他两点。 – Hailwood 2010-08-22 23:51:34

+0

我可以通过调用'$ .fn.tablejax = function(options){--blabla-- $('#'+ this.id +'Button')来获得。click( - blabla - ); }' – Hailwood 2010-08-22 23:55:05

相关问题