jquery - 创建一个 jquery 插件

标签 jquery plugins

这是我第一次尝试创建 jquery 插件,所以我认为 id 开始很简单,但即使这样也很麻烦......

这是我的代码。

(function($){
$.fn.elapsed = function(options) {
    var defaults = { seconds: true, minutes: true, hours: true, days: true };
    var options = $.extend(defaults, options);
    var ob = $(this);
    var secs = 0, mins = 0, hours = 0, days = 0;
    function elapsed_time( secs, mins, hours, days ){
        if( secs == 59 ) { mins++; secs = 0; }
        if( mins == 59 ) { hours++; mins = 0; }
        if( hours == 23 ) { days++; hours = 0; }
        ob.html( ( days === true ? days + ':' : false ) + ( hours === true ? hours + ':' : false ) + ( mins === true ? mins + ':' : false ) + ( secs === true ? secs + ':' : false ) );
        window.setTimeout( function(){ secs++; elapsed_time( secs, mins, hours, days ); }, 1000 );
    }
    elapsed_time( secs, mins, hours, days );    
};
})(jQuery);

似乎什么也没发生...谁能告诉我哪里出了问题?

最佳答案

您在显示中使用了相同的变量名称,我认为这是无意的,如下:

ob.html( ( days === true ? days + ':' : false ) + 
         ( hours === true ? hours + ':' : false ) + 
         ( mins === true ? mins + ':' : false ) + 
         ( secs === true ? secs + ':' : false ) );

应该更像这样:

ob.html( ( options.days ? days + ':' : '') + 
         ( options.hours ? hours + ':' : '') + 
         ( options.minutes ? mins + ':' : '' ) + 
         ( options.seconds ? secs : '') );

在这些条件中,如果显示该间隔,则希望显示分隔符,如果不显示,则不显示 false0 (我认为这是无论如何,你的意图)。由于这里的 secs0 开始,所以它根本没有改变,因为 0 是 false。

<小时/>

此外,您的间隔时间应该在它们到达时而不是在之前发生变化,因此对于分钟/小时,即 60 和第 24 天,如下所示:

if( secs == 60 ) { mins++; secs = 0; }
if( mins == 60 ) { hours++; mins = 0; }
if( hours == 24 ) { days++; hours = 0; }

....最后一个 this 已经是插件内的 jQuery 对象,所以你可以这样做:

var ob = this;

总的来说,看起来像这样:

(function($){
$.fn.elapsed = function(options) {
    var defaults = { seconds: true, minutes: true, hours: true, days: true };
    var options = $.extend(defaults, options);
    var ob = this;
    var secs = 0, mins = 0, hours = 0, days = 0;
    function elapsed_time( secs, mins, hours, days ){
        if( secs == 60 ) { mins++; secs = 0; }
        if( mins == 60 ) { hours++; mins = 0; }
        if( hours == 24 ) { days++; hours = 0; }
        ob.html( ( options.days ? days + ':' : '') + 
                 ( options.hours ? hours + ':' : '') + 
                 ( options.minutes ? mins + ':' : '' ) + 
                 ( options.seconds ? secs : '') );
        window.setTimeout( function(){ secs++; elapsed_time( secs, mins, hours, days ); }, 1000 );
    }
    elapsed_time( secs, mins, hours, days );    
};
})(jQuery);

You can test it out here .

关于jquery - 创建一个 jquery 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5203177/

相关文章:

javascript - 使用 jQuery 在 TextArea 中显示 xml

jquery - nl2br jQuery 函数从每一行中删除字符

javascript - 我想在 codeigniter 中禁用 datetimepicker 中的过去时间

javascript - 监控来自 IE BHO 的 ajax 调用

javascript - 删除元素时的 CKEditor 事件?

.net - 调用 WebMethod,传递 Dictionary<string, string> 作为参数

javascript - ContentEditable Iframe 中的自动链接 URL

java - 使用 maven-tycho : 导出 Eclipse 插件时为 "API restriction error"

Python:让数据对插件可用的方法有哪些?

javascript - Chrome和Safari浏览器中自定义协议(protocol)的检测方法