把它转成jquery函数?

时间:2010-08-22 23:04:48

标签: 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 + Button)

我希望函数本身能够跟踪我们应该从哪里开始, 目前我正在使用

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

这不太理想。

最简单的方法是什么?

注意:该函数应该假设传递给它的count已经被加载到表中,例如,如果你调用$('#tableUsers').tablejax('get_members.php', 27, 20);那么前20行已经加载到该表通过服务器端处理。

<小时/> 的更新
为了简化我的问题。

我需要能够致电$('#tableID).tablejax(--initial params here--); 准备好文件,

这基本上可以通过填写一些默认参数(例如标识符,网址,等)来准备功能 这也会将onclick事件处理程序添加到$('#tableIDButton'),点击后会调用类$('#tableIDButton').tablejax('next');

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

我需要知道的是

  • 如何在jquery中注册函数:已回答
  • 如何在调用该函数时注册click事件已回答: 结果我甚至可以从任何地方注册一次点击,而不仅仅是文档准备
  • 如果不是初始调用,如何在函数中调用'action'  (初始调用应使用参数,后续调用应调用'内部函数)

2 个答案:

答案 0 :(得分:3)

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

基本上你会写这样的东西:

(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中调用它
你需要实现这个功能,然后你可以在每个元素或选择器上调用它。

答案 1 :(得分:2)

使用extend()函数向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自己的文档中获取的。