3

您好,我正面临这个奇怪的 JQuery 问题。我的JS:

$("#flip-counter").centerH();
function centerH() {
var marginL = ( $(window).width() - $(this).width() ) / 2;
$(this).css("marginLeft",marginL+"px");
alert(marginL);
}

收到此错误:

Uncaught TypeError: Object [object Object] has no method 'centerH'         
(anonymous function) 

k jquery.js:2 
l.fireWith jquery.js:2 
p.extend.ready jquery.js:2
D jquery.js:2

jquery.js:2 为空。

我会理解是否没有任何代码可以工作,但现在一切正常,除此之外我无法添加任何其他功能。我只是不断收到同样的错误。所有文件都正确包含,当我删除这段 JS 代码时,我的代码就像一个魅力。

有什么建议么?

4

4 回答 4

6

如果您想将函数与 jquery 对象一起使用,则需要扩展 jquery。

$.fn.centerH = function() {
    var marginL = ( $(window).width() - $(this).width() ) / 2;
    $(this).css("marginLeft",marginL+"px");
    alert(marginL);
}
于 2012-12-15T11:34:15.840 回答
3

这段代码:

$("#flip-counter").centerH()

...尝试获取centerH从返回的 jQuery 对象调用的属性$("#flip-counter"),然后将其作为函数调用。所以centerH对象上必须有一个函数。

这段代码:

function centerH() {
var marginL = ( $(window).width() - $(this).width() ) / 2;
$(this).css("marginLeft",marginL+"px");
alert(marginL);
}

...创建一个centerH函数,但不做任何事情来将它添加到 jQuery。

如果您尝试制作jQuery 插件,请将函数分配给$.fn

$.fn.centerH = centerH;

一旦你这样做了,这$("#flip-counter").centerH()条线就可以工作了。但请注意,在 jQuery 插件函数中,this不是DOM 元素(您的$(this).css(...)代码似乎将其视为一个)。在 jQuery 插件函数中,this是调用该函数的 jQuery 对象(所以this.css(...)改为)。

于 2012-12-15T11:33:39.150 回答
1

centerH() 函数在全局范围内。但是您从 $("#flip-counter") jQuery 对象调用它。

如果您想让自己的自定义函数可用于 jQuery 对象,您可以这样创建它:

jQuery.fn.yourFunction = function() { 
    // do stuff
}
于 2012-12-15T11:33:59.263 回答
0

你不能像这样向 JQuery 添加函数。您需要使用 jQuery.fn.centerH 将其添加为插件

更多信息:

http://docs.jquery.com/Plugins/Authoring

于 2012-12-15T11:33:40.607 回答