奇怪的索引问题
Weird indexOf issue
如果没有数百行代码,将很难解释这一点,但我会尝试!
我有一个父对象,其中包含一个子对象数组。父级使用此函数将 MULTIPLE select 元素写入页面
function writecollectionmultiselect(name,displayname,selectedrange){
// Create select page element
var collection = $("<select/>");
collection.attr("name",name);
collection.attr("MULTIPLE","multiple");
// Loop over elements in this collection and ask them to draw themselves
for(var i=0; i<this.objectarray.length;i++){
collection.append(this.objectarray[i].writemultioption(selectedrange));
}
return collection;
}
家长要求每个孩子根据他们的 id 是否在"选定范围"中绘制自己的选项元素
function writemultioption(selectedrange){
var option = $("<option/>");
option.val(this.data.id);
option.html(this.data.name);
if(selectedrange.indexOf(parseInt(this.data.id)) >= 0){
option.attr('selected', 'selected');
}
return option;
}
当选择范围作为选定范围=[1,2,3] 提供时,这工作正常但是,如果我使用 jquery 读取页面元素的选定值
selectedrange = $('[name='+myname+"]").val();
当我尝试调用第一个函数时,indexOf 函数似乎完全崩溃了。我添加了这行调试代码
alert("looking for "+this.data.id+" in "+selectedrange+" result "+selectedrange.indexOf(parseInt(this.data.id)))
当我第一次绘制选择器时,我得到这个:
寻找 1 在 1,2,3 结果 0
但是,读取值并重新绘制会给出
寻找 1 在 1,2,3 结果 -1
我怀疑存在某种数据类型问题,但几个小时以来一直在对此进行猛烈抨击。任何帮助表示赞赏。
jQuery会给你一个字符串数组,你使用parseInt
将this.data.id
转换为数字,所以它们永远不会匹配,因为indexOf
比较是严格的。
一种解决方案是将字符串数组转换为数字。
selectedrange = $.map($('[name='+myname+"]").val(), function(n) {
return parseInt(n, 10);
});
或者另一种解决方案是将数组保留为字符串,但摆脱parseInt
并执行此操作。
if(selectedrange.indexOf(this.data.id) >= 0){
indexOf()
函数将 String 作为参数,在您的示例中关于传入整数,尽量不要调用 parseInt()
:
alert("looking for " + this.data.id + " in " + selectedrange + "result" + selectedrange.indexOf(this.data.id))
// no parseInt() here
此外,您获得-1
的原因是,当 indexOf()
函数在它正在搜索的字符串中找不到匹配项时返回-1
。
相关文章:
- 使用scrollmagic时出现z索引问题
- Javascript中的多维数组排序索引问题
- 奇怪的索引问题
- Javascript-在数组索引中循环的问题
- 多个选定的索引查询(选择选项菜单)出现问题
- Rails AJAX 销毁 - 重新渲染索引问题
- 重定向至“索引.html问题”诊断树
- NamedNodeMap对象内部的Attr对象索引问题
- jQuery淡入淡出元素的Z索引问题
- z索引问题2
- 可拖动和可丢弃的z索引问题
- Javascript循环索引问题
- 索引编号的JavaScript克隆表单元素问题
- Jscrollpane z索引问题
- PHP未定义索引的文件上载问题
- Lawnchair索引问题
- @{{#each}}内部的索引问题
- javascript/css转换+谷歌chrome的z索引问题
- 自定义选择框的表索引问题
- 非稀疏数组中的数组索引问题