使用JavaScript填充select's选项并删除它们
Using JavaScript to populate a select's options as well remove them
我正在创建一个允许用户分配球员位置的页面。我有一个球员名字的数组,以及一个任何球员都可以上场的位置数组。每个球员都可以在4节中的任何一节中担任任何位置。然而,在同一节比赛中,两名球员不能打同一个位置。
我的问题是,我不知道如何从选择选项中删除一个位置,一旦它被分配给另一个球员那个季度(并添加一个位置回到列表中,如果它被选中,然后取消选择)。
这是我的Javascript创建一个表。每一行都有一个球员的名字和一个选择选项。
//Creates an array of players
var aRoster = ["Phil", "Erik", "Dave", "Jimbo", "Billy Ray", "Sean", "Joe", "PP", "Shelly", "Mathew", "Scott", "Jarvis", "Hazard", "Ibra"];
//Creates an array of positions players can play
var aPositions = ["--", "LF", "RF", "LM", "LCM", "RCM", "RM", "CB", "LB", "SW", "RB", "K"];
var htmlStr = "<table class='table-bordered'><thread><tr><th class='col-xs-4'>Name</th><th class='col-xs-2'>Q1</th><th class='col-xs-2'>Q2</th><th class='col-xs-2'>Q3</th><th class='col-xs-2'>Q4</th></tr></thread><tbody>";
//Goes through a loop that puts each player in the table. Gives them an unique selector for each of the 4 quarters
for(var i=0; i < aRoster.length; ++i)
{
htmlStr += "<tr>";
htmlStr += "<td>" + aRoster[i] + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ1' class='form-control'></select>" + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ2' class='form-control'></select>" + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ3' class='form-control'></select>" + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ4' class='form-control'></select>" + "</td>";
htmlStr += "</tr>";
}
htmlStr += "</tbody></table>";
$('#roster-table').html(htmlStr);
//For each of the player's selectors, populate it with each positon
for (var i = 0; i < aRoster.length; i++)
{
var selectQ1 = document.getElementById( i+'positionQ1' );
var selectQ2 = document.getElementById( i+'positionQ2' );
var selectQ3 = document.getElementById( i+'positionQ3' );
var selectQ4 = document.getElementById( i+'positionQ4' );
for (var j = 0; j < aPositions.length; j++)
{
selectQ1.options.add(new Option(aPositions[j], aPositions[j]));
selectQ2.options.add(new Option(aPositions[j], aPositions[j]));
selectQ3.options.add(new Option(aPositions[j], aPositions[j]));
selectQ4.options.add(new Option(aPositions[j], aPositions[j]));
}
}
非常感谢!
这是一个可能的解决方案:
步骤:
- 为每个季度的选择控件添加一个类(假设为"q-1")。这样做是为了处理每个控件中选择控件的更改事件季度
- 创建一个名为"PopulatePositions"的方法,该方法总是清除选择控件中的任何现有值并填充新值。这是为了在更改事件期间刷新选择控件。
- 处理每个季度选择控件的更改事件,并与称为'HandleSelection'的通用方法连接(逻辑很简单)。参见方法)
//Creates an array of players
var aRoster = ["Phil", "Erik", "Dave", "Jimbo", "Billy Ray", "Sean", "Joe", "PP", "Shelly", "Mathew", "Scott", "Jarvis", "Hazard", "Ibra"];
//Creates an array of positions players can play
var aPositions = ["--", "LF", "RF", "LM", "LCM", "RCM", "RM", "CB", "LB", "SW", "RB", "K"];
var htmlStr = "<table class='table-bordered'><thread><tr><th class='col-xs-4'>Name</th><th class='col-xs-2'>Q1</th><th class='col-xs-2'>Q2</th><th class='col-xs-2'>Q3</th><th class='col-xs-2'>Q4</th></tr></thread><tbody>";
//Goes through a loop that puts each player in the table. Gives them an unique selector for each of the 4 quarters
for(var i=0; i < aRoster.length; ++i)
{
htmlStr += "<tr>";
htmlStr += "<td>" + aRoster[i] + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ1' class='form-control q-1'></select>" + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ2' class='form-control q-2'></select>" + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ3' class='form-control q-3'></select>" + "</td>";
htmlStr += "<td>" + "<select id=" + "'" + i +"positionQ4' class='form-control q-4'></select>" + "</td>";
htmlStr += "</tr>";
}
htmlStr += "</tbody></table>";
$('#roster-table').html(htmlStr);
//For each of the player's selectors, populate it with each positon
PopulateQ1Positions();
PopulateQ2Positions();
PopulateQ3Positions();
PopulateQ4Positions();
function PopulateQ1Positions(retainSelection)
{
for (var i = 0; i < aRoster.length; i++)
{
var selectQ1 = document.getElementById( i+'positionQ1' );
var currentSelectedValue = $(selectQ1).val();
$(selectQ1).empty();
for (var j = 0; j < aPositions.length; j++)
{
selectQ1.options.add(new Option(aPositions[j], aPositions[j]));
}
if (retainSelection==true)
{
$(selectQ1).val(currentSelectedValue);
}
}
}
function PopulateQ2Positions(retainSelection)
{
for (var i = 0; i < aRoster.length; i++)
{
var selectQ2 = document.getElementById( i+'positionQ2' );
var currentSelectedValue = $(selectQ2).val();
$(selectQ2).empty();
for (var j = 0; j < aPositions.length; j++)
{
selectQ2.options.add(new Option(aPositions[j], aPositions[j]));
}
if (retainSelection==true)
{
$(selectQ2).val(currentSelectedValue);
}
}
}
function PopulateQ3Positions(retainSelection)
{
for (var i = 0; i < aRoster.length; i++)
{
var selectQ3 = document.getElementById( i+'positionQ3' );
var currentSelectedValue = $(selectQ3).val();
$(selectQ3).empty();
for (var j = 0; j < aPositions.length; j++)
{
selectQ3.options.add(new Option(aPositions[j], aPositions[j]));
}
if (retainSelection==true)
{
$(selectQ3).val(currentSelectedValue);
}
}
}
function PopulateQ4Positions(retainSelection)
{
for (var i = 0; i < aRoster.length; i++)
{
var selectQ4 = document.getElementById( i+'positionQ4' );
var currentSelectedValue = $(selectQ4).val();
$(selectQ4).empty();
for (var j = 0; j < aPositions.length; j++)
{
selectQ4.options.add(new Option(aPositions[j], aPositions[j]));
}
if (retainSelection==true)
{
$(selectQ4).val(currentSelectedValue);
}
}
}
//events
var q1SelectCtrl = $('.q-1');
var q2SelectCtrl = $('.q-2');
var q3SelectCtrl = $('.q-3');
var q4SelectCtrl = $('.q-4');
q1SelectCtrl.on('change', function()
{
HandleSelection($(this), 'q1');
});
q2SelectCtrl.on('change', function()
{
HandleSelection($(this), 'q2');
});
q3SelectCtrl.on('change', function()
{
HandleSelection($(this), 'q3');
});
q4SelectCtrl.on('change', function()
{
HandleSelection($(this), 'q4');
});
function HandleSelection(thisCtrl, target)
{
var selectedValue = thisCtrl.val();
var selectedCtrlId = thisCtrl.attr('id');
var quarterCtrls = null;
if (target == 'q1')
{
quarterCtrls = q1SelectCtrl;
PopulateQ1Positions(true); //refresh
}
else if (target == 'q2')
{
quarterCtrls = q2SelectCtrl;
PopulateQ2Positions(true); //refresh
}
else if (target == 'q3')
{
quarterCtrls = q3SelectCtrl;
PopulateQ3Positions(true); //refresh
}
else if (target == 'q4')
{
quarterCtrls = q4SelectCtrl;
PopulateQ4Positions(true); //refresh
}
thisCtrl.val(selectedValue);
var qSelectedValueArray = [];
$.each(quarterCtrls, function(ctrlIndex, selectCtrl)
{
if ($(selectCtrl).val() != '--')
{
var item = {};
item.Value = $(selectCtrl).val();
item.ControlId = $(selectCtrl).attr('id');
qSelectedValueArray.push(item);
}
});
$.each(quarterCtrls, function(ctrlIndex, selectCtrl)
{
$.each(qSelectedValueArray, function(itemIndex, qSelectedValue){
if (qSelectedValue.ControlId != $(selectCtrl).attr('id'))
{
$(selectCtrl).find('option[value="'+qSelectedValue.Value+'"]').remove();
}
});
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="roster-table"></div>
相关文章:
- AngularJS ng选项在选择一个选项后删除了默认的空白值
- 从“新建”选项卡中的“访问次数最多”部分删除网站
- 带有预览和删除选项的图像上传-Javascript/Jquery
- jQuery-检测选择对象是否添加或删除了选项
- 从dojo comboBox中删除选项
- 选择选项是添加或删除事件
- 删除“;选择“;从下拉菜单的选项中选择
- 使用JavaScript删除多个select选项
- 如何使用jstree删除上下文菜单中的编辑选项
- 从选项选择中删除值
- 在 IE 中从 DOM 中删除选项时,滚动选择元素会跳到顶部
- 多个<选择>使用选择,选项删除(已选择)
- jquery mobile;选择“;确实't附加或删除“t”;选项”;
- 使用jquery如何自动删除下拉列表中的第一个空白选项(如果它依赖于另一个选项)
- 使用ng重复或ng选项和删除空白选项选择长方体角度
- 删除基于先前下拉列表选择的“选择下拉列表”选项
- 如何从选择 jsp 上的映射中删除选项
- Magento网站-按选项排序:上下箭头与排序数据绑定,只需删除上下箭头即可
- 如何使用fine Uploader通过删除选项将上传的文件名传递到服务器端
- 选择选项删除功能