-3

jQueryプラグインを作成しようとしています。

$.fn.examplePlugin = function(callback) {
    $.item = $(this);
    $(this).hide('fast',function () {
        callback('bla');
    });

    function show(a) {
       alert(a);
    }    

}

と使用

$('form').examplePlugin(function(data)) {
    this.show(data); // need to return alert 'bla'
});

アラート「bla」を返す必要があります

4

1 に答える 1

0

編集後、コードはほとんどあなたが意図したことを実行します。問題は2つだけです。

  1. この行の目的は何ですか?

    $.item = $(this);
    

    $要素を参照しているフィールドをjQueryオブジェクト(エイリアス)に作成しています。プラグインをN回呼び出すと、そのフィールドはN回上書きされます。あなたが達成しようとしていたことは何でも、これはそれを行う方法ではありません。

  2. あなたの機能showはクロージャーの内側でのみ利用可能でありfunction(callback) { ... }、外部からアクセスすることはできません。呼び出しthis.showは何もしませんthis。DOM要素を参照しているため、メンバーを追加しようとしないでください。

    「適切な」方法として、プラグインのオーサリングに関するチュートリアルを読むことをお勧めしますが、簡単な回避策として、show関数を引数としてコールバックにも渡してみませんか?

    $(this).hide('fast',function () {
        callback(show, 'bla');
    });
    
    ...
    
    $('form').examplePlugin(function(show, data) {
        show(data); // will perform (not return) "alert('bla')"
    });
    
于 2012-12-19T23:01:19.770 に答える