4

在使用插件时,我有时会偶然发现一个类似这样的插件:

  • 它将采用构造函数参数。
  • 一些参数解析为函数。
  • 其中一些需要多次争论。

像这样:

{
    color: function (someData, moreData) {
        return someData + moreData;
    }
}

如何将两个参数传递给该函数?

注意:我无法更改插件,因此不能将第二个参数移动到另一个构造函数参数。

示例 JavaScript:

(function ($) {
    $.fn.greenify = function (options) {
        var settings = $.extend({
            color: function (someData, moreData) { // <-- THIS TAKES 2 ARGUMENTS!
                return someData + moreData;
            },
        }, options);
        return this.css({
            color: settings.color,
        });
    };
}(jQuery));

$("#target1").greenify({
    color: "blue"
});

$("#target2").greenify({
    color: ["bl", "ue"]   // <-- In your answer only this should be changed
});

我的目标:

<div id="target1">My Thing</div>   // <-- will be blue
<div id="target2">My Thing2</div>  // <-- will be black but should be blue

小提琴演示


更新: 我误以为这段代码

$("#target1").greenify({
    color: "blue"
});

会将值作为第一个参数"blue"传递给。这是假的!实际发生的是默认回调 ( ) 完全被字符串替换!function (someData, moreData)someDatafunction (someData, moreData)"blue"

4

3 回答 3

3

如何将两个参数传递给该函数?

你没有。jQuery 可以。这是一个回调函数,用于在方法中动态确定color属性.css()- 请参阅文档

所以实际上,该默认函数没有任何意义,因为它应该返回一个 css 颜色值,而是返回以元素索引为前缀的旧值——这绝对不是颜色。

所以只需使用$("#target2").greenify({color: "black"}).

如果你想传递一个函数,那也是可能的——但它会覆盖,而不是调用那个默认函数。一个例子:

$("div").greenify({
    color: function(index, prevColor) {
        return ["blue", "black"][index % 2];
    }
});
于 2013-06-03T14:08:13.090 回答
0
var settings = $.extend({}, options);
if($.isArray(options.color)) {
    settings.color = function () {
        return options.color.join('');
    };
}

小提琴:http: //jsfiddle.net/2QBGm/

于 2013-06-03T14:09:16.540 回答
0

看到这个jsFiddle

我已经对您的代码进行了一些更改,它现在可以按照您的意愿工作。

我使用选项对象来获取参数:

color: function () {
    return options.color[0] + options.color[1];
}
于 2013-06-03T14:33:42.363 回答