3

Chosen jQuery ライブラリ内の 2 つの関数にパッチを適用しようとしていますが、元の関数を参照しようとしても、Chosen is undefined でコンソールが返されます。

これが私のコードです。

        function(){
        var _no_results = window.jQuery.fn.chosen.prototype.no_results;
        var _no_results_clear = window.jQuery.fn.chosen.prototype.no_results_clear;

        window.jQuery.fn.chosen.prototype.no_results = function (terms) {
            console.log('nr');
            var no_results_html;
            no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
            no_results_html.find("span").first().html(terms);
            if (this.options.no_results_callback) {
                this.options.no_results_callback(no_results_html, terms);
            }
            return this.search_results.append(no_results_html);
            //return _no_results.apply(terms);
        }


        window.jQuery.fn.chosen.prototype.no_results_clear = function (terms) {
            console.log('nrc');
            var no_results_html;
            no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
            no_results_html.find("span").first().html(terms);
            if (this.options.no_results_clear_callback) {
                this.options.no_results_clear_callback(no_results_html, terms);
            }
            return this.search_results.find(".no-results").remove();
            //return _no_results_clear.apply(terms);
        }
    }

何か案は?

4

2 に答える 2

1

選択したライブラリの古いバージョン (v0.9.14 など) は と を公開ChosenAbstractChosenていたようですが、最新 (2019 年 3 月 25 日現在の v1.8.7) ではどちらも公開されていません。代わりに、現在のバージョンでは.data(key, value) jQuery メソッドChosenを利用して、オブジェクトへの参照をキーの下に格納しchosenます。これを、初期化された選択リストとObject.getPrototypeOf JavaScript メソッドChosenと組み合わせて使用​​して、またはAbstractChosen関数をオーバーライドすることができます。

たとえば、ページのどこかに次があるとします。

<select id="futureChosenSelect" ... >
  <option value="HiMom">Hi Mom!</option>
  ...
</select>

そして、あなたは選択したもの<select>でそれを構成しました:

$('#futureChosenSelect').chosen();

次のような関数をオーバーライドできるはずです。

Object.getPrototypeOf( $('#futureChosenSelect').data('chosen') ).no_results = function(terms) { ... };
于 2019-03-22T20:01:11.660 に答える
0

プロトタイプをコピーしないでください。それは jQuery の仕組みではありません。内部的にプラグインと変数をマップに保存します (名前 -> 関数)。これはうまくいくはずです:

 var _no_results = window.jQuery.jQuery.fn['chosen'].no_results;
 var _no_results_clear = window.jQuery.fn['chosen'].no_results_clear;

 window.jQuery.fn['chosen'].no_results = function (terms) { 
    ...
    _no_results.apply(this, terms);
 }

 window.jQuery.fn['chosen'].no_results_clear = function (terms) { 
    ...
    _no_results_clear.apply(this, terms);
 }

セレクターチェーンの内部ログのjQuery内部関数を置き換えるために、一度それを行いました。ここでその仕組みを確認してください(github)

于 2013-01-30T12:20:14.210 に答える