2013-10-15 318 views
1

我有兩個select boxJquery Mobile與相同的數據選項。在當我初始化頁面開始我建立他們動態:從其他選擇框中選擇框中選擇框動態刪除選項,

var first = document.getElementById("selectBoxFirst"); 
    var second = document.getElementById("selectBoxSecond"); 

    for (var i = 0; i < this.data.length; i++) 
    { 
     first.options[i] = new Option(this.data[i].option, this.data[i].optionId); 
     second.options[i] = new Option(this.data[i].option, this.data[i].optionID); 
    } 

我嘗試做的下一件事:當用戶選擇一個選擇框的選項,該選項將在第二個被刪除.. 如果你再次選擇不同的選項,所以這最後一個選項將從第二個刪除和previos將顯示,等等...

任何想法如何實現它?

+0

這是你想要的嗎? http://jsfiddle.net/Palestinian/bH2we/在這個演示中,您可以一次刪除一個選項。 – Omar

+0

@Omar謝謝你的例子,但是選擇一個選項不會在第二個複選框中刪除這個選項。我尋找類似的東西:[jsfiddle.net/igtr/vHxhx] - 唯一的問題是,在checkBox1中選擇項目後,您會得到第二個n-1選項,然後在checkBox2中再次選擇將導致n-2在第一個複選框 – Dima

+0

抱歉,我的演示中有一個錯誤。所以你想要一次選擇一個選項,不能同時選擇多個選項? – Omar

回答

0

您可以選擇隱藏或禁用所選選項。

  1. 隱藏選定的選項(這可能不是舊的瀏覽器工作)

    • CSS:

      .hide { 
          display: none; 
      } 
      
    • JS

      $('#first').on('change', function() { 
          $('select option.hide').removeClass('hide'); 
          var sel = $('option:selected', this).index(); 
          $('#second option:eq("' + sel + '")').addClass('hide'); 
      }); 
      
      $('#second').on('change', function() { 
          $('select option.hide').removeClass('hide'); 
          var sel = $('option:selected', this).index(); 
          $('#first option:eq("' + sel + '")').addClass('hide'); 
      }); 
      

Demo


  1. 禁用所選的選項:(這並不適用於IE7和更早版本的工作)

    • JS

      $('#first').on('change', function() { 
          $('select option:disabled').prop('disabled', false); 
          var sel = $('option:selected', this).index(); 
          $('#second option:eq("' + sel + '")').prop('disabled', true); 
      }); 
      
      $('#second').on('change', function() { 
          $('select option:disabled').prop('disabled', false); 
          var sel = $('option:selected', this).index(); 
          $('#first option:eq("' + sel + '")').prop('disabled', true); 
      }); 
      

Demo

0

使用普通的JavaScript的方法是相當簡單:

var select1 = document.getElementById('first'), 
    select2 = document.getElementById('second'); 

select1.addEventListener('change', function() { 
    while (select2.firstChild) { 
     select2.removeChild(select2.firstChild); 
    } 
    for (var i = 0, len = this.options.length; i < len; i++) { 
     if (this.options[i].value !== this.value) { 
      select2.appendChild(this.options[i].cloneNode()); 
     } 
    } 
}, false); 

DEMO:http://jsfiddle.net/Tp2z7/


你可以寫同樣使用jQuery短一點:

$('#first').on('change', function() { 
    $('option:not(:selected)', this).clone().appendTo($('#second').empty()); 
}); 

DEMO:http://jsfiddle.net/Tp2z7/1/

+0

試過[jsfiddle](http://jsfiddle.net/Tp2z7/)的例子 - 它不是 在第一個選擇框中選擇選項後第二個爲空 在第二個選擇框中選擇不會更改第一個選擇框中的選項 – Dima

+0

@Dima您使用的是什麼瀏覽器?第一種方法在所有現代瀏覽器中都可以正常工作。嘗試jQuery方法,也許它會對你更好。 – VisioN

+0

@VisionN jQuery示例工作正常!我使用Chrome(11版)。不幸的是,我的項目與jQuery 1.6.4協同工作,'.on'事件在那裏不存在。我該如何更換它? – Dima

相關問題