使用插件时,我偶尔偶然发现一个有这样的插件:
{
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)
作为第一个参数someData
。 这是假的! 实际发生的是默认回调(function (someData, moreData)
)完全被字符串"blue"
取代!
答案 0 :(得分:3)
如何将两个参数传递给该函数?
你没有。 jQuery呢。这是一个回调函数,用于在color
方法中动态确定.css()
属性 - 请参阅the docs。
实际上,默认函数没有任何意义,因为它应该返回一个css颜色值,但返回以元素索引为前缀的旧值 - 这绝对不是一种颜色。
所以只需使用$("#target2").greenify({color: "black"})
。
如果你想传递一个函数,那也是可能的 - 但它会覆盖,而不是调用那个默认函数。一个例子:
$("div").greenify({
color: function(index, prevColor) {
return ["blue", "black"][index % 2];
}
});
答案 1 :(得分:0)
var settings = $.extend({}, options);
if($.isArray(options.color)) {
settings.color = function () {
return options.color.join('');
};
}
答案 2 :(得分:0)
请参阅此jsFiddle
我对您的代码进行了一些更改,现在可以按照您的需要进行操作。
我使用options对象来获取参数:
color: function () {
return options.color[0] + options.color[1];
}