循环反转数组的Javascript
Javascript for loop reversing array
我在for循环中填充两个下拉控件,这两个控件都是包含相同数据的telerik下拉控件(月或季度)。奇怪的是,这个代码的结果是,一个控件是从Jan-Dec开始订购的,但另一个控件被颠倒了,Dec-Jan(monthToDropdown)。我已经修复了第二块代码的问题,但我想了解为什么会发生这种情况,某种参考问题?
这是产生交替下降的代码:
function PeriodChoiceIndexChange(sender, args) {
var itemText = args.get_item()._text;
var monthToDropDown, monthFromDropDown ;
monthToDropDown = $find("<%= ToMonthDropDown.ClientID %>");
monthFromDropDown = $find("<%= FromMonthDropDown.ClientID %>");
var months = new Array();
months[0] = "Jan";
months[1] = "Feb";
months[2] = "Mar";
months[3] = "Apr";
months[4] = "May";
months[5] = "Jun";
months[6] = "Jul";
months[7] = "Aug";
months[8] = "Sep";
months[9] = "Oct";
months[10] = "Nov";
months[11] = "Dec";
var quarters = new Array();
quarters[0] = "Q1";
quarters[1] = "Q2";
quarters[2] = "Q3";
quarters[3] = "Q4";
monthToDropDown.trackChanges();
monthToDropDown.clearItems();
monthToDropDown.commitChanges();
monthFromDropDown.trackChanges();
monthFromDropDown.clearItems();
monthFromDropDown.commitChanges();
if (itemText == "Quarterly") {
for (var i = 0; i < quarters.length; i++) {
var comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(quarters[i]);
comboItem.set_value(quarters[i]);
monthToDropDown.trackChanges();
monthToDropDown.get_items().add(comboItem);
monthToDropDown.commitChanges();
monthFromDropDown.trackChanges();
monthFromDropDown.get_items().add(comboItem);
monthFromDropDown.commitChanges();
}
} else {
for (var i = 0; i < months.length; i++) {
var comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(months[i]);
comboItem.set_value(months[i]);
monthToDropDown.trackChanges();
monthToDropDown.get_items().add(comboItem);
monthToDropDown.commitChanges();
monthFromDropDown.trackChanges();
monthFromDropDown.get_items().add(comboItem);
monthFromDropDown.commitChanges();
}
}
return false;
}
以下是按相同顺序填充两个控件的代码:
if (itemText == "Quarterly") {
for (var i = 0; i < quarters.length; i++) {
var comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(quarters[i]);
comboItem.set_value(quarters[i]);
var comboItem1 = new Telerik.Web.UI.RadComboBoxItem();
comboItem1.set_text(quarters[i]);
comboItem1.set_value(quarters[i]);
monthToDropDown.trackChanges();
monthToDropDown.get_items().add(comboItem);
monthToDropDown.commitChanges();
monthFromDropDown.trackChanges();
monthFromDropDown.get_items().add(comboItem1);
monthFromDropDown.commitChanges();
}
} else {
for (var i = 0; i < months.length; i++) {
var comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(months[i]);
comboItem.set_value(months[i]);
var comboItem1 = new Telerik.Web.UI.RadComboBoxItem();
comboItem1.set_text(months[i]);
comboItem1.set_value(months[i]);
monthToDropDown.trackChanges();
monthToDropDown.get_items().add(comboItem);
monthToDropDown.commitChanges();
monthFromDropDown.trackChanges();
monthFromDropDown.get_items().add(comboItem1);
monthFromDropDown.commitChanges();
}
}
正如你所看到的,当我已经解决了这个问题时,我想了解这个反转背后的理论
@nnnnnn上面说的是正确的。在循环中,我们将元素添加到第一个下拉列表,然后尝试将其添加到第二个下拉列表。但是,将相同的元素添加到第二个下拉列表将从第一个下拉列表中删除。
我创建了一个SSCCE来说明实际发生了什么。
function PeriodChoiceIndexChange(sender, args) {
var monthToDropDown = $find("ToMonthDropDown"),
monthFromDropDown = $find("FromMonthDropDown");
var months = new Array();
months[0] = "Jan";
months[1] = "Feb";
monthFromDropDown.trackChanges();
monthFromDropDown.clearItems();
monthFromDropDown.commitChanges();
monthToDropDown.trackChanges();
monthToDropDown.clearItems();
monthToDropDown.commitChanges();
for (var i = 0; i < months.length; i++) {
var comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(months[i]);
comboItem.set_value(months[i]);
alert("[" + i + "][0] From Count = " + monthFromDropDown.get_items().get_count() + "; To Count = " + monthToDropDown.get_items().get_count());
monthFromDropDown.get_items().add(comboItem);
alert("[" + i + "][1] From Count = " + monthFromDropDown.get_items().get_count() + "; To Count = " + monthToDropDown.get_items().get_count());
monthToDropDown.get_items().add(comboItem);
alert("[" + i + "][2] From Count = " + monthFromDropDown.get_items().get_count() + "; To Count = " + monthToDropDown.get_items().get_count());
}
alert("[PeriodChoiceIndexChange] End");
return false;
}
当你运行这个程序时,你会得到以下输出:
回路警报t0警报t1警报20 0,0 1,0 0,11 0,1 1,1 0,2
要修复当前的方法,只需更改最后一个块即可重新实例化项目,如下所示:
var comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(quarters[i]);
comboItem.set_value(quarters[i]);
monthToDropDown.trackChanges();
monthToDropDown.get_items().add(comboItem);
monthToDropDown.commitChanges();
comboItem = new Telerik.Web.UI.RadComboBoxItem();
comboItem.set_text(quarters[i]);
comboItem.set_value(quarters[i]);
monthFromDropDown.trackChanges();
monthFromDropDown.get_items().add(comboItem);
monthFromDropDown.commitChanges();
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 将Javascript数组发送到控制器ASP.NET MVC
- JavaScript数组包含一个值
- 将JavaScript数组传递给函数
- javascript:数组循环
- 将数据存储在javascript数组中以供进一步使用
- 在Javascript数组中查找绝对最大值
- JavaScript数组优化以提高性能
- 在javascript数组中分散数字
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript数组动态
- javascript数组元素是否知道其封闭数组
- 将 JSON 数组解析为 JavaScript 数组
- 将Transform和Instance Variable转换为对象的JavaScript数组
- 使用Web Html表单创建Javascript数组
- 从重复的javascript数组结果集中只获取一行
- 如何为Javascript数组()的使用准备PHP变量
- Javascript数组和函数
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)