2

Webアプリケーション検索ページの複数の選択フィールドに素敵なSelect2を使用しています。会社/業界/学校で人を検索できます。それぞれに数百の検索可能な値があるため、正しいselect2 cssがロードされるまでに時間がかかります(約1秒)。古い醜いselectフィールドは、きれいなselect2フィールドが表示される前にちらつきで表示されます。添付されているのは、遷移を示す2つのスクリーンショットです。

これが私のビューコードです:

        <%= form_tag('', :method => :get) do %>
          <div class="row-fluid">  
            <div class="span4">
              <label>What industries have they worked in?</label>
                <%= select_tag "industry_ids", options_for_select((@visible_industries), params[:industry_ids]), { :placeholder => "Type to search...", :multiple => true, :id => "e3", :onchange => 'this.form.submit();' } %>
                <%= hidden_field_tag :&, params[:industry_ids] %>
            </div>
            <div class="span4">
              <label>What companies have they worked at?</label>
                <%= select_tag "company_ids", options_for_select((@visible_companies), params[:company_ids]), { :placeholder => "Type to search...", :multiple => true, :onchange => 'this.form.submit();' } %>
                  <%= hidden_field_tag :&, params[:company_ids] %>           
            </div>
            <div class="span4">
              <label>Where did they go to school?</label>
              <%= select_tag "school_ids", options_for_select((@visible_schools), params[:school_ids]), { :placeholder => "Type to search...", :multiple => true, :onchange => 'this.form.submit();' } %>
                <%= hidden_field_tag :&, params[:school_ids] %>
            </div>
            <div class="row-fluid">
          <% end %>
        </div>
      </div>

そしてコントローラーコード:

  def people
    @current_user = current_user

    @visible_positions = Position.where{ is_visible.eq('true') }
    @visible_educations = Education.where{ is_visible.eq('true') }

    @visible_companies = @visible_positions.order("LOWER(company)").all.map { |p| [ p.company, p.company ] }.uniq
    @visible_industries = @visible_positions.order("LOWER(industry)").all.map { |p| [ p.industry, p.industry ] }.uniq
    @visible_schools = @visible_educations.order("LOWER(school)").all.map { |e| [ e.school, e.school ] }.uniq

    @c = @visible_positions.where{company.in(my{params[:company_ids]})}.map(&:user_id)
    @i = @visible_positions.where{industry.in(my{params[:industry_ids]})}.map(&:user_id)
    @s = @visible_educations.where{school.in(my{params[:school_ids]})}.map(&:user_id)

    unless @c.empty? && @i.empty? && @s.empty?
      @users = User.find([@c,@i,@s].reject(&:empty?).reduce(:&))
    end

  end

最後に、(select2 cssに加えて)アセットディレクトリに次のJavaScriptがあります。

$(document).ready(function(){

  $('select').select2({
    minimumInputLength: 1
  });
});

このちらつきを防ぐにはどうすればよいですか?ありがとうございました。

ここに画像の説明を入力してください ここに画像の説明を入力してください

4

1 に答える 1

5

問題が解決したので、コメントを回答として投稿します。

私の提案は、ページが完全に読み込まれるまで (および select2 が適用されるまで)、select を非表示にすることです。

input {display:none;}スタイルシートで、それらを非表示にするルールを追加します (visibility:hiddenより良いかもしれませんが)。次に、jQuery でそのルールをオーバーライドします$('input').css("display","inline");

于 2012-11-13T17:35:06.623 に答える