基于来自另一个

时间:2017-04-12 18:40:12

标签: jquery dropdown

我有两个下拉列表。每个包含相同的时间列表。当选择列表“A”中的时间时,我想要禁用列表“B”中的相同和所有先前时间。

List A                   List B
------                   ------
06:00 AM                 06:00 AM
07:00 AM                 07:00 AM
08:00 AM                 08:00 AM
...                      ...

因此,当有人点击列表“A”中的07:00 AM时,列表“B”中的时间和先前将被禁用。

$('#listA').on('change', function(){
   ...
});

+1经济编码。

更新

我最终做到了这两种方式:

function setDisableOptions( from, to ) {
    $( document.body ).on( 'change', '[name="' + from + '"]', function () {
        var s = $( this ).prop( 'selectedIndex' ) + 1;
        var l = $( '[name="' + from + '"] option' ).length;
        $( this ).find( 'option' ).prop( 'disabled', false );
        for ( var i = 0; i <= l; i++ ) {
            if ( i <= s ) {
                $( '[name="' + to + '"] > option:nth-child(' + i + ')' ).attr( 'disabled', 'disabled' );
            } else {
                $( '[name="' + to + '"] > option:nth-child(' + i + ')' ).removeAttr( 'disabled' );
            }
        }
    } );
    $( document.body ).on( 'change', '[name="' + to + '"]', function () {
        var s = $( this ).prop( 'selectedIndex' ) + 1;
        var l = $( '[name="' + to + '"] option' ).length;
        $( this ).find( 'option' ).prop( 'disabled', false );
        for ( var i = 0; i <= l; i++ ) {
            if ( i >= s ) {
                $( '[name="' + from + '"] > option:nth-child(' + i + ')' ).attr( 'disabled', 'disabled' );
            } else {
                $( '[name="' + from + '"] > option:nth-child(' + i + ')' ).removeAttr( 'disabled' );
            }
        }
    } );
};

被称为:

setDisableOptions( 'fromInputName', 'toInputName');

2 个答案:

答案 0 :(得分:0)

这可能会有所帮助

$('#listA').on('change', function(){
	var s = $(this).prop('selectedIndex')+1;
	var l = $("#listA option").length;
	for(var i = 0; i <= l; i++){
		if(i <= s) {
			$("#listB > option:nth-child(" + i + ")").attr('disabled','disabled');
		} else {
			$("#listB > option:nth-child(" + i + ")").removeAttr('disabled');
		}
	}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="listA" name="sometext" size="5">
  <option>text1</option>
  <option>text2</option>
  <option>text3</option>
  <option>text4</option>
  <option>text5</option>
</select>
<select id="listB" name="sometext" size="5">
  <option>text1</option>
  <option>text2</option>
  <option>text3</option>
  <option>text4</option>
  <option>text5</option>
</select>

答案 1 :(得分:0)

这是一种更好,更优雅的方式(从您的代码编辑)

$('select').change(function () {
    var s = $(this).prop('selectedIndex')+1;
    var selected = $(this);
    var fcontrol = function () {
        if (selected.attr('id') == 'listA') {
        	return $(this).index()+1 < s;
        } else {
        	return $(this).index()+1 > s;
        };
    }
    var others = $(this).siblings('select').children() 
    others.prop('disabled', false).filter(fcontrol).prop('disabled', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="listA" size="5">
    <option>One</option>
    <option>Two</option>
    <option>Three</option>
    <option>Four</option>
    <option>Five</option>
</select>
<select id="listB" size="5">
    <option>One</option>
    <option>Two</option>
    <option>Three</option>
    <option>Four</option>
    <option>Five</option>
</select>

相关问题