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 プラグイン関数では、 はDOM 要素でthisない$(this).css(...)ことに注意してください (コードはそれを 1 つとして扱っているようです)。jQuery プラグイン関数内でthisは、関数が呼び出された (this.css(...)代わりに) jQuery オブジェクトです。

于 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 に答える