2014-03-03 69 views
1

我在某个类中有一些选择,当更改事件发生在任何这些选择时,我想执行以下操作:搜索发生更改事件的所选值的所有选择,当发现我想交换这两个值。更改所选选项的值

不适举一个例子:

<div id="l1col1" class="selects1"> 
    <select onChange='swap(newVal, oldVal);'> 
     <option selected>3</option> 
     <option>2</option> 
     <option>1</option> 
    </select> 
</div> 

<div id="l1col2" class="selects1"> 
    <select onChange='swap(newVal, oldVal);'> 
     <option selected>2</option> 
     <option>3</option> 
     <option>1</option> 
    </select> 
</div> 

<div id="l1col3" class="selects1"> 
    <select onChange='swap(newVal, oldVal);'> 
     <option selected>1</option> 
     <option>2</option> 
     <option>3</option>   
    </select> 
</div> 

我的选择中没有一个可以具有其他的相同的值:永远不会有1或2或3 更多然后一次。

这是我的交换功能

function swap (x,y){  
    //alert($(x).find(":selected").text()); 
    var tt = $(x).find(":selected").text();   
    alert(tt + y); 
    $('.selects2 :selected:contains("' + tt + '")').text("' + y + '"); 
} 

的问题是,当我打电话更改事件可以说在其中包含3的第一选择,并与1改变它,交换功能改变了有1个选择作为选择3,但也改变选择,我又变成了3。

你能帮我解决这个问题吗? 我希望我足够清楚

+0

你怎么能交换值时,每个只选择具有1倍的值开始吗? –

+0

swap(newVal,oldVal);应该交换(“newVal”,“oldVal”); –

+0

你能提供jsfiddle吗? –

回答

1

首先,使用jQuery来附加事件而不是丑陋的内联处理程序。其次,您可以使用data属性来存储要比较的旧值。试试这个:

$('.selects1 select') 
    .each(function() { 
     var $this = $(this); 
     $this.data('old-value', $this.val()); 
    }) 
    .change(function() { 
     var $this = $(this); 
     var newValue = $this.val(); 
     var oldValue = $this.data('old-value'); 
     $('.selects1 select').not(this).filter(function() { 
      return $(this).val() == newValue; 
     }).val(oldValue).data('old-value', oldValue); 
     $this.data('old-value', newValue); 
    }); 

Example fiddle

+0

辉煌非常感谢你 – Joseph

+0

@ user2515601没问题,乐于帮忙 –