【问题标题】:remove & add select box option if other selection changes如果其他选择发生变化,则删除并添加选择框选项
【发布时间】:2012-04-16 06:23:55
【问题描述】:

我有 3 个选择框,并且都具有相同的值(克隆)并在更改参考表选择时创建。 现在我想管理三个约束下拉列表中的选择,以便它“不显示在其他两个中选择的一个”并且用户不能从两个中选择相同的。 如何在jquery中做到这一点?

代码是 -

<tr>
<td> Reference Table:</td>
<td>
   <select id="tableCombo" onchange="jQuery.ajax({type:'POST',data:'tableCombo=' +        this.value, url:'/GryphonMonitor   /load/getColumns',success:function(data,textStatus)   {jQuery('#columns').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown)    {},complete:function(XMLHttpRequest,textStatus){LoadSelects();}});" name="tableCombo">
  </td>
  </tr>
  <tr id="cons">
<td nowrap=""> Constraint On: </td>
<td nowrap="">
<select id="columns" onchange="colChange(this);" name="columns">
<option value="CountryCode">CountryCode</option>
<option value="Date">Date</option>
<option value="Number">Number</option>
<option value="Type">Type</option>
</select>
</td>
<td  nowrap=""> Constraint Value: </td>
<td  nowrap="">
 </tr>
<tr id="cons1">
<td> Constraint On: </td>
<td>
<select id="columns2" onchange="colChange(this);" name="columns2">
<option value="CountryCode">CountryCode</option>
<option value="Date">Date</option>
<option value="Number">Number</option>
<option value="Type">Type</option>
 </select>
</td>
<td> Constraint Value: </td>
<td>
 </tr>
 <tr id="cons2">
   <td> Constraint On: </td>
  <td>
  <select id="columns3" onchange="colChange(this);" name="columns3">
<option value="CountryCode">CountryCode</option>
<option value="Date">Date</option>
<option value="Number">Number</option>
<option value="Type">Type</option>
</select>
</td>
<td> Constraint Value: </td>
<td>
  </tr>

JS函数在这里-

 function LoadSelects()
{
$("#columns2, #columns3").html( $("#columns").html()).val('') ;
}
  ///I  am trying to do thru this menthod but does not look good. here looking for help.


function getArray()
{
   var selectElement = [];  
  $('#columns option').each(function() {
 selectElement.push($(this).val())
 });
return selectElement;      
}  

 function colChange(col){
selectElements = getArray();
var $this = col;
for (i = 1; i < selectElements.length; i++)
{
     if(col.value == selectElements[i]){
   if(col.name == 'columns'){
  $('#columns2').find('option[value=' + selectElements[i] + ']').remove();
$('#columns3').find('option[value=' + selectElements[i] + ']').remove();
         }
else if(col.name == 'columns2'){
$('#columns').find('option[value=' + selectElements[i] + ']').remove();
$('#columns3').find('option[value=' + selectElements[i] + ']').remove();
             }
else if(col.name == 'columns3'){
$('#columns').find('option[value=' + selectElements[i] + ']').remove();
$('#columns2').find('option[value=' + selectElements[i] + ']').remove();
             }

     }

我相信对于经验丰富的 jquery 开发人员来说,这应该是一件简单的事情。 提前致谢。

【问题讨论】:

    标签: javascript jquery grails gsp cloning


    【解决方案1】:

    更新为改进的解决方案!

    我希望这会有所帮助,这是一个非常基本的演示,需要进行一些调整,但应该可以解决问题! http://jsfiddle.net/BUuZv/2/

    【讨论】:

    • 进入更改功能,但之后不适用于我的代码。
    【解决方案2】:

    如果我对您的理解正确,您在每个 &lt;select&gt; 中都有具有相同值的 &lt;option&gt; 元素,并且您希望在选择 &lt;option&gt; 元素之一时禁用其他每个 &lt;select&gt; 元素中的选择.这是一个小sn-p,展示了我是如何做到的:

    HTML

    <select class="hello">
        <option value=""></option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
        <option value="A">A</option>
    </select>
    <select class="hello">
        <option value=""></option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
        <option value="B">B</option>
    </select>
    <select class="hello">
        <option value=""></option>    
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
        <option value="C">C</option>
    </select>
    

    jQuery

    $(document).ready(function () {
        $('select.hello').change(function () {
            $('select.hello option').attr('disabled', false);
            $('select.hello').each(function() {
                var val = $(this).find('option:selected').val();
                if (!val) return;
                $('select.hello option').filter(function() {
                    return $(this).val() == val;
                }).attr('disabled', 'disabled');
            });
        });
    });
    

    这里是 jsFiddle 的链接:http://jsfiddle.net/yLCVf/1/

    【讨论】:

      【解决方案3】:

      我已经更新了代码。这就是你要找的东西

      $('select').change(function() {
        if ($(this).val() == 'other') {
          $('#select1, #select2, #select3').not(this)
            .children('option[value="other"]')
            .remove()
        } else {
          if ($('#select1, #select2, #select3').not(this).find('option[value=other]').length > 0) {
      
          } else {
      
            ($('#select1, #select2, #select3').not(this)
              .append('<option value="other">Other</option>'))
          }
        }
      });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <select id="select1" name="select1">
        <option>No Match</option>
        <option value="1">Test</option>
        <option value="2">Test 2</option>
        <option value="other">Other</option>
      </select>
      
      <select id="select2" name="select2">
        <option>No Match</option>
        <option value="1">Test</option>
        <option value="2">Test 2</option>
        <option value="other">Other</option>
      </select>
      <select id="select3" name="select3">
        <option>No Match</option>
        <option value="1">Test</option>
        <option value="2">Test 2</option>
        <option value="other">Other</option>
      </select>

      http://jsfiddle.net/dZqEu/2003/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-12
        • 2022-01-19
        • 1970-01-01
        • 2012-05-14
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多