我有以下代码:
<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是否是最佳解决方案以及我将如何实现它。
这是一个排名系统,我需要发生的事情很简单。如果用户从任何下拉列表中选择任何值,则需要从其他下拉列表中删除该值。相反,如果用户随后取消选择该值,则需要返回所有下拉列表。
答案 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);
}
});
});
});
这只是一种方法:我在几分钟内把它放在一起,我确信它可以改进,但这应该让你开始。