1

plug-in大きなサイト全体で使用している入力フィールドのランタイム検索を処理するために、をベイクしました。

プラグインはあらゆる状況で完璧に機能しますが、このhttp://jsfiddle.net/tonino/v8d2A/

$(document).ready(function () {
    var callback_methods = { /* methods here */ };
    var input_html = '<div class="search"><input name="search-field" value="Search..."></div>';
    $(document).on('click', 'div.add', function (event) {
        if (!$('li div.add + div').hasClass('search')) {
            var input = $(this).after(input_html).parent().find('input');
            input.focus();
            input.hunter({url:'<?php echo $this->request->base; ?>/searches', callback:callback_methods, var_name:'data[Search][term]'});
            // other code after
        }
    });
});​

ハンタープラグインについてコメントすると、すべて正常に機能します。

私はそれがどのように構造化されなければならないかについてのいくつかの概念があると確信しています、ここにコードがあります:jquery.hunter.1.3.js

なぜ私plug-inはそれを書くのが間違っているこの状況でこのエラーを犯すのですか?

4

2 に答える 2

1

問題は、コードのこの部分です。

var selector = this.selector;

var def_css = {backgroundPosition:'-16px center', paddingLeft:$(selector).css('padding-left')}
if (settings.loader) { setStyle(def_css); }
   var selector = this.selector;

以降:

$(this.selector).blur(function () {

まず、ifブロック内で変数「セレクター」を再宣言しようとしているため、if条件が満たされたときにコードが機能しません。var-statementをそのままにしておきます。

if (settings.loader) { setStyle(def_css); }
  selector = this.selector;

しかし、あなたの主な問題は、「this.selector」に「.parent()input」が含まれていることです。これは、有効なjQueryセレクターではないと思います。

どうしてそんなことをするのか?$(this)を使用して変数に保存し、これを使用しないのはなぜですか?

例えば:

// first line in your plugin
$this = $(this) 


// later you could use the $this var
$this.blur(function () {
于 2012-12-14T10:04:00.890 に答える
0

エラーを取り除くには、次の行を変更します。

var input = $(this).after(input_html).parent().find('input');

次のように:

var input = $(input_html).insertAfter($(this));

ただし、主要な問題は、jquery.hunterプラグインがthis.selector何らかの理由で変数を使用していることです。これは必要ありません。プラグインは$(this)代わりに変数を使用する必要があります。$(this.selector)

于 2012-12-14T10:08:11.157 に答える