-1

要素の選択に関して、何か誤解していると思います。

次のクエリがあります。

$('#my_id_1 #my_id_2').my_function();

<form id="my_id_1">
  <input id="my_id_2" type="text" />
</form>

それは "inside" のmy_function()場合にのみトリガーされます。my_id_2my_id_1

my_id_2しかし、関数は、私が持っているが持っていない別のページでもトリガーされますmy_id_1

ここで何が欠けているのか誰か教えてもらえますか?

コードの更新

$('#my_form #country').my_func().autosuggest_country();


(function () {
  // "Namspace" which also kind of works like an interface
  $.fn.my_func = function(opt) {
    this.autosuggest_country = autosuggest.autosuggest_country ;
    return this;
  }


  var autosuggest = {
    autosuggest_country : function(action) {
      $(this).autocomplete({ (...) });
    }
  }
})(jQuery);

ページ1

<form id="my_form" class=""  method="post" onsubmit="return false;">
  <input id="country" type="text" autocomplete="off"  required="required" />
</form>

ページ2

<div id="mainSection" class="mainGrid">

  <div class="selectCountry">
    <select id="country" name="selectlist_country"> (...) </select>
  </div>
</div>
4

3 に答える 3

4

現在のコード ブロックは、セレクターに一致するすべての jQuery 選択オブジェクトを作成し'#my_id_1 #my_id_2'、jQuery メソッドmy_function()をそのセレクターに適用します。このメソッドは、オブジェクトがまだすべての jQuery メソッドを保持しているため、選択オブジェクトが空であるかどうかにかかわらず呼び出されます。

jQuery には、選択範囲内の要素ごとにコード ブロックを 1 回実行するメソッドがあります。.each()方法です。ID はページに 1 回だけ表示される必要があるため (したがって'#my_id_1 #my_id_2'、単一の DOM 要素にのみ対応する必要があるため)、これはあなたが行っていることに対して機能するはずです。

my_functionこれを実装するには、 が jQuery メソッドか関数かに応じて、次のようにコードを使用します。

通常の機能:

$('#my_id_1 #my_id_2').each(my_function());

jQuery メソッド:

$('#my_id_1 #my_id_2').each($(this).my_function());

これはmy_function()、$('#my_id_1 #my_id_2') 内の各要素に対して 1 回呼び出されます。これは、0 回または 1 回である必要があります。の範囲内ではmy_functionthisどちらの場合も選択中の要素に対応します。

編集:コメントが現在機能していないため、編集中です。

あなたはできるはずです:

$('#my_form #country').each(
    $(this).my_func().autosuggest_country()
)

あなたがしたいことは、のmy_func()各要素に適用することです$('#my_form #country')(または、セレクターが空の場合は何もしません)ので、this内でjQuery セレクターを使用し.each()ます。 thisは DOM 要素であり、DOM の jQuery セレクターではないため$(this)、jQuery メソッドにアクセスするために使用する必要があります。次に、標準のメソッド チェーンでメソッド on this( によって返される) を使用できます。my_func()

このフィドルを参照してください。

于 2013-04-25T16:45:43.927 に答える
0

Idはどのページでも一意である必要があります..

$('#my_id_1 #my_id_2') そもそも不要です。

Just $('#my_id_2').my_function() すべきです。

したがって、話している特定のページのインスタンスのみをターゲットにしたい場合は..次に、input a class name instead.

<form id="my_id_1">
  <input class="my_id_2" type="text" />
</form>

これで、期待しているページでのみ起動します

$('#my_id_1 .my_id_2').my_function();

またはそれ以上

`$('.my_id_2', '#my_id_1').my_function();`  
于 2013-04-25T16:37:25.870 に答える