0

#dpmt_filter、#area_filter、#moi_filter の 3 つの選択を保持する #filter div があります。他の2つの選択ボックス(現在の選択ボックスを無視)を「すべて」オプション(一番上のオプション)に「リセット」することはできません。私はそれが次のようなものになると思いました:

$('#filters :input').not($(this)).val('all');

しかし、うまくいきませんでした。他の選択ボックスに到達して現在を無視する方法はありますか?

jQuery(document).ready(function($){
$('#courses_listing div.accordion').addClass('active');
$('#filter :input').change(function(){
    var current_value = $(this).val();
    //$('#filters :input').not(current_value).val('all');
    if(current_value=="all")
    {
        $('#courses_listing p').remove('.no-courses');
        $('#courses_listing div.accordion').removeClass('hidden').addClass('active');
        $('#filters :input').val('all');
    }
    else
    {
    if ($('#courses_listing').find('.accordion').hasClass('hidden')){
            $('#courses_listing').find('.accordion').not('.' + $(this).val()).removeClass('active').addClass('hidden'); // changes other values from active to hidden.
            $('#courses_listing').find('.accordion' + '.' + current_value).removeClass('hidden').addClass('active'); // changes selected value from hidden to active.
    } else if ($('#courses_listing').find('.accordion').hasClass('active')){
            $('#courses_listing').find('.accordion').not('.' + $(this).val()).removeClass('active').addClass('hidden'); // changes selected value from active to hidden.
        }
        if (!$('#courses_listing div.accordion').hasClass('active')) {$('#courses_listing div#filters').after('<p class="no-courses">There are no courses with the current filter.</p>');}
        else{$('#courses_listing p').remove('.no-courses');}
  }});
});

追加するために、#filters div 内の 1 つの選択ボックスの例を次に示します。

<div id="filters">
    <div id="dpmt_filter">
        <p>Select box 1</p>
        <form action="<?php bloginfo('url'); echo $_SERVER["REQUEST_URI"]; ?>" method="get">

      <?php // Grabs Department terms and displays them         
            $dpmts = get_terms('departments', array(
                        'orderby'    => 'name',
                        'hide_empty' => 0
                    ) );
            ?>
          <select id="departments">
                <option value="all">All</option>
          <?php foreach ($dpmts as $dpmt) : ?>
              <option value="<?php echo $dpmt->slug; ?>"><?php echo $dpmt->name; ?></option>
          <?php endforeach; ?>
          </select>
    </form>
  </div>
</div>
4

3 に答える 3

0

書くことで

$('#dpmt_filter :input').change(関数(){

#dpmt_filter select に変更リスナーを追加したかったのですが、間違っています。あなたは書くべきです

$('#dpmt_filter').change(関数(){

「#dpmt_filter :input」は #dpmt_filter 選択内の入力、テキストエリア、選択、またはボタンを選択するため、これはあなたのケースではないと思います。したがって、this変更リスナーは #dpmt_filter select を参照しません

ところで、変更リスナーをデバッグしようとしましたか? #dpmt_filter select 内に入力、ボタン、またはテキストエリアを配置したことを意味するため、そのリスナーが呼び出されると奇妙になります

于 2013-07-25T22:22:16.383 に答える
0

マークアップがなければ、実際には取得できませんが、「current_value」をキャプチャしていることがわかるので、すべての入力を「すべて」に設定してから元に戻してください:

$('#filters :input').each(function(e) {
    $(this).val('all');
});
$(this).val(current_value);

これは.not()を使用するように変更できると確信しています。

于 2013-07-25T22:05:04.203 に答える