1

なぜ呼び出しがconsole.log(this.attr("id"));未定義として表示されるのですか?

(function( $ ) {
    $.fn.fs_suggest = function(options) {
        console.log(this.attr("id"));
    };
})( jQuery );

$("#places_search").fs_suggest();

HTMLは次のとおりです。

<div class="search_container" id="search">
    <form data-remote="false" method="get" action="/search">
        <input type="text" placeholder="search places" name="query" id="places_search">
        <input type="submit" value="search">
    </form>
</div>

.fs_suggest()関数が呼び出される要素(この場合は$( "#places_search"))への参照を取得しようとしています。

4

3 に答える 3

8

私はあなたがこれを望んでいると思います:

console.log($(this).attr("id"));

私が間違っていない限りthis、DOM要素(関数を持たない)を参照しますが、実際のjQueryオブジェクト(attr関数を持っている)を$(this)フェッチします。


これ(または私はthis?hehehe ...)が機能しない場合は、間違ったセレクターで関数を呼び出しているだけです。


jQueryドキュメントをさらに詳しく調べると、問題は提供されたコンテキスト以外の場所にあるように見えます。DOMが正しく読み込まれる前にプラグインを呼び出していますか?(例:外$(document).ready()

于 2012-05-16T02:23:05.197 に答える
0

私はこれを解決しました。問題は、fs_suggest()の呼び出しをdocreadyブロックに配置しなかったことです。だから答えはこのように呼ぶことです。

Places.js.coffee:

$ ->    
    $("#places_search").fs_suggest()

そして別のファイルでプラグイン:

(function( $ ) {
    $.fn.fs_suggest = function(options) {
        console.log(this.attr("id"));
    };
})( jQuery );

これで「this」が表示され、$( "#places_search")に相当します。

于 2012-05-16T18:32:06.630 に答える
0

私はこの表記法によって生成されているものを100%ではありません:

$.fn.fs_suggest = function(options) {
...

ただし$.fn、オブジェクトに解決され、fs_suggestそのオブジェクトのプロパティである場合this、関数内はそのオブジェクトを参照し、DOM要素やjQueryでラップされた要素は参照しません。

于 2012-05-16T02:53:30.923 に答える