立即触发的JQuery.one()事件

时间:2015-01-02 19:42:41

标签: javascript jquery

我正在创建一个jquery插件,您可以在其中设置事件以便发生。

$.fn.makeSomething = function(options) {
    var defaults = {
        activationEvent: "mouseover"
    };
    options = $.extend(defaults, options);

    this.each(function() {
        var elem = $(this);
        elem.one(options.activationEvent, function(){
            // some code to be called at the event (in which I use elem)
            // but by default should be called immediately on load
        });
    });

    return this;
}

我希望默认情况下它只是在没有任何需要的交互的情况下发生。这可能吗?

更多信息:

我有几个div,其中应加载一些额外的内容。默认情况下,我希望在页面加载时加载内容。但是,在某些页面上,我并不希望所有内容都加载到页面中,但我希望只有当您将鼠标悬停在div上时才能加载每个内容。

谢谢!

1 个答案:

答案 0 :(得分:3)

如果将function定义与绑定分开:

$.fn.makeSomething = function(options) {
    // ...

    function doSomething() {
        // ...
    }

    $(this).one(options.activationEvent, doSomething);
};

您可以在activationEvent中测试非事件的默认值,例如null,为.each()提供相同的功能:

$.fn.makeSomething = function(options) {
    var defaults = {
        activationEvent: null
    };
    options = $.extend(defaults, options);

    function doSomething() {
        var $elem = $(this);
        // ...
    }

    if (!options.activationEvent)
        this.each(doSomething);
    else
        this.one(options.activationEvent, doSomething);
};
// act immediately
$('...').makeSomething();
// act on mouseover
$('...').makeSomething({ activationEvent: 'mouseover' });

.one().each()都会调用doSomething()this引用DOM元素。 (注意:提供给doSomething()的参数会有所不同。)