jQuery / Javascript根据选定的答案更改选择选项

时间:2013-07-29 16:13:38

标签: javascript jquery drop-down-menu

我有以下代码:

<table>
<tr><td>Item</td><td>Ranking</td></tr>
<tr><td>Apples</td><td><select id="apple" name="apple"> 
    <option value="#" selected="selected">Rank...</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
</select></td></tr>
<tr><td>Oranges</td><td><select id="oranges" name="oranges"> 
    <option value="#" selected="selected">Rank...</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
</select></td></tr>
<tr><td>Bananas</td><td><select id="bananas" name="bananas"> 
    <option value="#" selected="selected">Rank...</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
</select></td></tr>
<tr><td>Lemons</td><td><select id="lemons" name="lemons"> 
    <option value="#" selected="selected">Rank...</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
</select></td></tr>
<tr><td>Limes</td><td><select id="limes" name="limes"> 
    <option value="#" selected="selected">Rank...</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
</select></td></tr>
<tr><td>Kiwi</td><td><select id="kiwi" name="kiwi"> 
    <option value="#" selected="selected">Rank...</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
</select></td></tr>

这里是jsFiddle:http://jsfiddle.net/XNYU2/

我试图了解这是否可能,如果是这样,jQuery或Javascript是否是最佳解决方案以及我将如何实现它。

这是一个排名系统,我需要发生的事情很简单。如果用户从任何下拉列表中选择任何值,则需要从其他下拉列表中删除该值。相反,如果用户随后取消选择该值,则需要返回所有下拉列表。

3 个答案:

答案 0 :(得分:4)

试试这个:

$(function() {
    $('select').on('change', function(event){ // This binds listeners to the change event on all the select elements
        var sId = this.id; // store off the changed element id
        var vId = this.value; // store off the changed element value 
        $('select').each( function(){ // this loops across the same set of elements
            if(this.id != sId && this.value == vId) { // If it is not the triggering element and the value is the same, do something
                this.options.selectedIndex = 0; // reset the value to 'rank' 
            }
        });
    });
});

您可以在jQuery或纯js中执行此操作,但jQuery选择器确保可以轻松遍历元素并使用非常少的代码对更改执行操作。

重新阅读你的问题,这完成了同样的事情,但略有不同;用户被迫只有一组有序排名而没有重叠,但我们不必去除删除/添加选项的麻烦。

答案 1 :(得分:1)

是的,这是JavaScript的任务。 jQuery不是JavaScript的替代品,但基本上是一个工具集,它使浏览器元素的操作更容易。我建议使用它,即使您需要了解JavaScript基础知识才能有效地使用它。

这里的关键是分解你的问题;一种是在Select更改后执行操作。请参见此处如何完成此操作:http://api.jquery.com/change/

第二个动作是实际实现改变,例如描述的改变。这里 Removing an item from a select box

答案 2 :(得分:1)

jsFiddle 就在这里,这就是代码:

var SelectOptions = ['Rank...', 1, 2, 3, 4, 5];

$(document).ready(function () {

    $('#TheTable').find('select').change(function () {

        var TheSelectedValue = parseInt($(this).val(), 10);
        var TheSelectID = $(this).prop('id');
        var TheHTML = "";

        for (var i = 0; i < SelectOptions.length; i++) {

            if (SelectOptions[i] !== TheSelectedValue) {

                TheHTML = TheHTML + '<option value="';
                TheHTML = (i === 0) ? TheHTML + '#' : TheHTML + SelectOptions[i];
                TheHTML = TheHTML + '">' + SelectOptions[i] + '</option>';
            } 
        }

        $('#TheTable').find('select').each(function () {

            if ($(this).prop('id') !== TheSelectID) {

                $(this).html(TheHTML);           
            }
        });
    });
});

这只是一种方法:我在几分钟内把它放在一起,我确信它可以改进,但这应该让你开始。