0

プロトタイプから jQuery にファイルを移行しています。

プロトタイプ:

function hideEditableMarkers() {
   $$('.edit_marker').each(function(el) {
  el.hide();
});
   $$('.show_marker').each(function(el) {
    el.show();
    });
}

Event.observe(window, 'load', hideEditableMarkers);

jQuery:

function hideEditableMarkers() {
  jQuery('.edit_marker').each(function(el){
    el.hide();
    });

  jQuery('.show_marker').each(function(el){
    el.show();
    }); 
}

jQuery(document).ready(hideEditableMarkers());

なぜうまくいかないのかわかりません。

4

4 に答える 4

2

各コールバック関数の最初のパラメーターは、要素への参照ではなく、要素のインデックスです

ここにjqueryコードがあります

function hideEditableMarkers() {
  $('.edit_marker').each(function(idx,el){
    $(el).hide(); // You may use 'this' variable in here as it points to the current element as well
    });

  $('.show_marker').each(function(idx,el){
     $(el).show();
    }); 
}
于 2013-10-21T08:12:50.807 に答える
0

これ:

jQuery(document).ready(hideEditableMarkers());

次のようにする必要があります。

jQuery(document).ready(hideEditableMarkers);

readyDOM 準備完了イベントのコールバック ハンドラーとして実行されるように、関数参照を渡す必要があります。現在行っていることは、(要素が存在しない場合) 関数をすぐに実行し、その関数からの戻り値 (何もない) を のコールバックとして渡すことです.ready()

于 2013-10-21T08:13:54.567 に答える
0

関数は再利用可能であるべきだと思います:

/*global jQuery */

function toggleMarkers (hideSelector, showSelector) {

    jQuery(hideSelector).each(function () {
        jQuery(this).hide();
    });

    jQuery(showSelector).each(function () {
        jQuery(this).show();
    });

}

jQuery(document).ready(function ($) {
    toggleMarkers('.edit_marker', '.show_marker');
});
于 2013-10-21T08:27:30.433 に答える
0

それぞれの内部で使用$(this)して、現在の要素を取得します...あなたが持っているのはインデックスであり、インデックスをjqueryセレクターとして使用しますel.hide()

これを試して

function hideEditableMarkers() {
 jQuery('.edit_marker').each(function(el){
   $(this).hide();
 });

 jQuery('.show_marker').each(function(el){
   $(this).show();
  }); 
 }

jQuery(document).ready(function(){
  hideEditableMarkers() ;
});

//or

jQuery(document).ready(hideEditableMarkers);
于 2013-10-21T08:16:05.153 に答える