我有一个隐藏字段,我添加字符串,用分号分隔。如何在添加新字符串时检查重复项?
我正在做
function AddToHiddenField(source, hdnFieldId)
{
var srcList = document.getElementById(source);
var hdnFieldSubstring = document.getElementById(hdnFieldId);
var len = srcList.length;
hdnFieldSubstring.value = '';
for(var i = 0; i < len; i++)
{
if (srcList.options[i] != null)
{
if (hdnFieldSubstring.value == "")
{
hdnFieldSubstring.value = srcList.options[i].text;
}
else
{
hdnFieldSubstring.value = hdnFieldSubstring.value + ";" + srcList.options[i].text;
}
}
}
}
如何在添加到hdnFieldSubstring中之前检查字符串(在javascript中)?
答案 0 :(得分:1)
如果你总是将半冒号放在值中,这会更简单。即。
if (srcList.options[i] && hdnFieldSubstring.value.indexOf(srcList.options[i].text + ";") == -1)
hdnFieldSubstring.value += srcList.options[i].text + ";";
现在你总是可以在末尾搜索带分号的字符串。
答案 1 :(得分:0)
您可以使用JavaScript的 indexOf()
方法。如果返回值大于'-1',则它在字符串中。
一些评论者对indexOf()
返回误报提出了一个很好的观点。我更新了我的答案以纠正错误,并且还包括拼写修复。我正在使用contains()
method from this question。当然,这仅适用于srcList
不包含分号的情况。
function contains(arr, obj) {
var i = arr.length;
while (i--) {
if (arr[i] === obj) {
return true;
}
}
return false;
}
function AddToHiddenField(source, hdnFieldId)
{
var srcList = document.getElementById(source);
var hdnFieldSubstring = document.getElementById(hdnFieldId);
var len = srcList.length;
var value = '';
for(var i = 0; i < len; i++)
{
var currentOption = srcList.options[i].text;
if (srcList.options[i] != null)
{
if (value == "")
{
value = currentOption;
}
else if(!contains(val.split(';'), currentOption))
{
value += ";" + currentOption;
}
}
}
hdnFieldSubstring.value = value;
}
如果我是你,我会修改变量名中的拼写错误。如果你对所有变量名使用正确的拼写,你会感谢你自己(除非你真的想使用“已归档”而不是“字段”)
答案 2 :(得分:0)
老实说,我不会将数据保留在字段中,我会在数组中执行。
function AddToHiddenField(source, hdnFieldId)
{
//create storage if it doesn't exist
if (typeof(window.hiddenFieldData)=='undefined')
{
window.hiddenFieldData = [];
}
var srcList = document.getElementById(source);
for(var i=0, n=srcList.length, value; i<n; i++)
{
if (srcList.options[i] != null)
{
var value = srcList.options[i].text;
/*
ignores duplicates by virtue of overwriting index -
if you didn't want to just overwrite you'd wrap this with:
if(typeof(window.hiddenFieldData[value])=='undefined')
*/
window.hiddenFieldData[value] = value;
}
}
//serialise storage to hidden field
document.getElementById(hdnFieldId).value = window.hiddenFieldData.join(';');
}
经验法则:如果必须对字符串进行反序列化以保持完整性,则不应将字符串用作数据存储。
注意:如果您的原始源由于某种原因在隐藏字段中,我仍然会这样做,但我会用string.split
启动我的数组