0

我不确定这个问题是否已经被问过,但我有一个活生生的例子,所以我希望我的问题可能有用。这里我有 jQuery 的自定义插件:

(function($){
    jQuery.alertSay = function(options){
        var options = $.extend({say:'open'}, options};
        alert('We are currently ' + say + '!');
    };
})(jQuery);

连接到主 index.html:

$(document).ready(function() {
    $.alertSay({
        say: 'on vacations'
    });
});

由于选项,它不起作用,因为如果我使用没有任何选项的简单方法,如下所示:

(function($){
    jQuery.alertSay = function(){
        alert('We are currently on vacations!');
    };
})(jQuery);

它适用于以下链接:

$(document).ready(function() {
    $.alertSay();
});

由于我对 jQuery 的了解不足,我无法检测到我的错误在哪里,如果可能的话,你会很高兴帮助我。谢谢!

UPD:感谢您的回复,但不幸的是替换

alert('We are currently ' + say + '!');

alert('We are currently ' + options.say + '!');

什么都不改变,完全没有警报。但我有一些错误:

Uncaught SyntaxError: Unexpected token } hallo.js:3
Uncaught TypeError: Object function (a,b){return new p.fn.init(a,b,c)} has no method 'alertSay' (in the html on string $.alertSay({)
4

2 回答 2

2

问题在这里:

alert('We are currently ' + say + '!');
// -------------------------^

你要

alert('We are currently ' + options.say + '!');

第一个是寻找一个名为say. say第二个是在你的options对象上寻找属性。


你也有一个}你想要的地方)

var options = $.extend({say:'open'}, options};
// -----------------------------------------^

应该

var options = $.extend({say:'open'}, options);

通过这两个修复,它运行良好source)。

于 2013-07-20T14:04:50.717 回答
2

在您的第一个代码段中替换sayoptions.say

(function($){
    jQuery.alertSay = function(options){
        var options = $.extend({say:'open'}, options); // some error here
        alert('We are currently ' + options.say + '!');
    };
})(jQuery);

jsfiddle:演示

于 2013-07-20T14:05:16.397 回答