我正在创建一个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上时才能加载每个内容。
谢谢!
答案 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()
的参数会有所不同。)