方法的jQuery选项停止工作

时间:2013-07-20 13:58:07

标签: javascript jquery

我不确定这个问题是否已被提出,但我已经成为榜样,所以我希望我的问题可能有用。这里我有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({)

2 个答案:

答案 0 :(得分: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);

通过这两项修正,it runs finesource)。

答案 1 :(得分:2)

在您的第一段代码中,将say替换为options.say

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

jsfiddle:DEMO