1

私の状況をコードで説明します。

HTML:

<div class="list1">
  <select class="select250">
    <option class="temp" selected="selected" name="filter[]">Select</option>
    <option class="" value="George" name="filter[]">George</option>
    <option class="" value="Ben" name="filter[]">Ben</option>
  </select>
</div>
<div class="list2">
  <select class="select251">
    <option class="temp" selected="selected" name="filter[]">Select</option>
    <option class="" value="Sarah" name="filter[]">Sarah</option>
    <option class="" value="Alex" name="filter[]">Alex</option>
    <option class="" value="Natalie" name="filter[]">Natalie</option>
  </select>
</div>
<div class="list3">
  <select class="select252">
    <option class="temp" selected="selected" name="filter[]">Select</option>
    <option class="" value="Mobile" name="filter[]">Mobile</option>
    <option class="" value="Car" name="filter[]">Car</option>
    <option class="" value="Computer" name="filter[]">Computer</option>
  </select>
</div>

JS (これは PHP 内で使用されます):

<script type="text/javascript">
  $('.select<?php echo $sid?>').change(function() {
    $('.temp', this).remove();  // THIS IS FINE
    if ($('option').siblings('.temp')) { } 
    else { $('select').prepend('<option name="filter[]" selected="selected" class="temp">Select</option>');  // THIS IS NOT WORKING 
    }
  });
</script>

私がやりたかったのは、オプションが選択されるたびに、そのリスト内の「選択」オプションを削除する必要がありますが、他のリストでは「選択」オプションを保持することです。この部分はうまく機能しているようです。次に行うことは、オプションが別のリストで選択されている場合、それが選択されているリストを除く他のすべてのリストで選択を戻す必要があります。上記のようにコードを書いてみましたが、それを乗り越えることができませんでした。誰かが私を正しい方向に導くことができれば、それは素晴らしいことです. ありがとう。

4

2 に答える 2

3

これを試してください..これはまだ最適化できます..

$('[class^=select]').on('change', function() {
    $('.temp', this).remove();
    var $that = $(this);
    $('select').not($that).each(function() {
        if (!$(this).find('option.temp').length > -1) {
            $(this).prepend('<option name="filter[]" selected="selected" class="temp">Select</option>');
        }
    });
});​

フィドルをチェック

于 2012-10-30T07:42:19.613 に答える
1

このようなものはどうですか:

$('select').not($(this)).each(function() {
 if ($(this).find('.temp').size() > 0) continue;

 $(this).prepend('<option class="temp" ... </option>');
});
于 2012-10-30T07:46:13.517 に答える