0

私はこのコードをHTMLで持っています

<div class="details-content">
    <p class="biography user_fillable inline_editable" data-id="Biography"></p>
</div>

ユーザーが段落をクリックすると、テキスト フィールドに変わります。そしてそれはプラグインを介して行われます。

プラグイン コード:

(function ($) {
    $.fn.inlineeditor = function (callback) {

        var $txt = $('<input type="text" class="inline-editor-text"/>');

        return this.each(function () {
            var $this = $(this);

            $this.on('click', function () {
                var _txt = $txt.clone().val($this.text()).insertAfter(this);

                $this.hide();
                _txt.select()
                    .on('keydown', function (e) {
                        if (e.which == '13') {
                            $this.text(_txt.val()).show();
                            _txt.remove();
                            if (callback) {
                                callback($this.text());
                            }
                        } else if (e.which == '27') {
                            $this.show();
                            _txt.remove();
                            if (callback) {
                                callback(null);
                            }
                        }
                    }).on('blur', function (e) {
                        $this.show();
                        _txt.remove();
                        if (callback) {
                            callback(null);
                        }
                    });
            });
        });

    };
})(jQuery);  

使用法:

<script>
    $(function(){

    var $inlineeditable = $('.inline_editable');

        $inlineeditable.inlineeditor(function (data) {
            var $this = $(this), id = $this.data('id');
            if (data != null) {
                alert(data);
                alert(id);
            }
        });

    });
</script>  

データは取得できますが、「this」オブジェクトは取得できません。' ' オブジェクトを取得したいのですがthis、これは次と同等です:

<p class="biography user_fillable inline_editable" data-id="Biography"></p>

やっていますreturn this.each(function () {が、うまくいかないようです。

サンプルはこちら

4

2 に答える 2

2

thisコールバックを呼び出すときに、コンテキストを明示的に設定する必要があります。現時点では、関数をオブジェクトのメソッドとして呼び出していないため、thisコンテキストはデフォルトでグローバルwindowオブジェクトになります。したがって、$(this)あなたのコールバックは同等になります$(window)- 正確には必要なものではありません。

次のように、最初のパラメーターとしてコンテキストを受け入れるFunction.callorを使用して、コールバックを呼び出す必要があります。Function.applythis

callback.call($this[0], $this.text());
callback.call($this[0], null);
于 2013-01-26T10:44:39.983 に答える
1

あなたの質問を解釈するのは難しいです。私はあなたの問題が戻ることではないと仮定しています(現在、あなたはプラグインが呼び出されたjQueryオブジェクトを返していますthis.プラグインが処理している DOM 要素。これは、callback.call(<value for this>, <first param>, <second param>, ...)代わりに を使用して行われcallback(<first param>, <second param>, ...)ます。

于 2013-01-26T10:44:39.420 に答える