所以,我承认我有点 JS 菜鸟,但据我所知,这应该有效,但事实并非如此。
背景:
我有一个带有 3 个列表框的表单。列表框命名为 app1、db1 和 db2。我使用 javascript 来允许用户添加额外的列表框,增加每个额外选择框的名称标签。
当我添加其他应用程序命名框时,每个附加字段的值都会正确递增。如果我尝试添加名为 selects 的附加 db,它无法通过数组识别第一个循环中的第二个标签。这导致我最终得到 2 个名为 db2 的元素。在每个后续标签上,它都被正确识别并正确递增。
这是 db1 标记的 HTML:
<select name="db1">
*options*
</select>
和 db2:
<select name="db2">
*options*
</select>
标签是相同的。这是我用来计算序列中下一个数字的函数(注意:标签是 app 或 db,标签是 DOM 中所有选择标签名称的数组,如果我检查标签,它会给我['app1', 'db1', 'db2', '']
):
function return_select_name(tag, tags) {
matches = new Array();
var re = new RegExp(tag + "\\d+", "g");
for (var i = 0; i < tags.length; i++) {
var found = re.exec(tags[i]);
if (found != null) {
matches.push(found[0]);
}
}
matches = matches.sort();
index = parseInt(/\d+/.exec(matches.last())) + 1;
index = tag + index;
return index;
}
如果我添加一个应用程序标签,它将返回“app2”。如果我搜索一个 db 标签,它会在第一次返回“db2”,第二次返回 db3,等等。
所以基本上,我确定我在这里做错了什么。