我有一个表单,其中字段的名称类似于data[Field][0][value], data[Field][1][value]
等等,其中整数递增但其余字段保持不变。有没有办法找到jQuery最低的可用整数值?
我的表单使用JS动态添加和删除字段(其中一些是由页面加载时的PHP后端创建的),所以我需要最小的整数,以便创建没有冲突的字段。
现在,在页面加载时,我将field_count
设置为$( "input[name$='[value]'" ).length;
,然后在创建输入时将其递增。这可以防止任何命名空间冲突,但是它不会考虑删除的输入:我希望能够重用已删除字段的名称。
答案 0 :(得分:1)
如果您可以解决data[Field][0] ... data[Field][n]
,那么我会说data[Field]
是Array
而data[Field].length
会返回Array
的当前长度。在这种情况下,最后一个值将在data[Field][data[Field].length-1]
中,下一个可用的整数(索引)将是data[Field].length
。 击>
只是为了好玩并展示另一种选择:如果你放弃了命名方案&#39;并使用数据属性来跟踪输入字段,例如<input type="text" data-idx="1">
您可以使用方法动态确定可用的最低插槽:
function getFreeSlot(inputFields) {
var freeslots = []
,idxs = inputFields.map(
function (i, el) { return +$(el).attr('data-idx');}
).toArray()
idxs.every( function (v,i) {
void( v-(i ? 1 : 0) !== this[(i>0 ? i-1 : 0)]
&& freeslots.push(this[(i>0 ? i-1 : 0)]+1) );
return v; }, idxs );
return freeslots.length ? freeslots[0] : idxs.length+1;
}
答案 1 :(得分:1)
假设您的描述属于页面上动态创建/销毁字段的name
属性(换句话说,<input name="Data[Field][0][value]">
):
var $lastField = $('[name^=Data\\[Field\\]\\[][name$=\\]\\[value\\]]').last();
var lastField = $lastField[0];
这应该得到DOM中的最后一个元素,其名称与正则表达式Data[Field][.*][value]
匹配。如果你想确保中间位是一个数字,你需要更多地参与:
var $lastField = $('[name^=Data\\[Field\\]\\[').filter(function(idx, element) {
return /Data\[Field\]\[[0-9]+?\]\[value\]/.test($(this).attr('name'));
}).last();
var lastField = $lastField[0];
答案 2 :(得分:1)
您是否可以保留已删除元素的列表,然后只需弹出列表中的一个,以便在需要创建新元素时使用(如果列表为空,只需按现在的步骤增加field_count)