Beholder said:
Short background explenation:
I have a shrfepoint page (newform.aspx) in a item list. On this page is
a lookup column that displays a lookup of all category items in
previous items. In the code this results in a select/options list like
this:
<SELECT TABINDEX=1
NAME="urn:schemas-microsoft-com
ffice
ffice#CatLookup"><OPTION
Value="">(None)</OPTION><OPTION VALUE="8">name 1</OPTION><OPTION
VALUE="10">name 2</OPTION>><OPTION VALUE="11">name 1</OPTION></SELECT>
Is there a way to clean-up or rewrite this select list before it is
published and remove the double entry using javascript?
To clean up:
-----------------------------------------
<form>
<select tabindex="1"
name="urn:schemas-microsoft-com
ffice
ffice#CatLookup">
<option value="">(None)</option>
<option value="8">name 1</option>
<option value="10">name 2</option>
<option value="11">name 1</option>
</select>
</form>
<script type="text/javascript">
var S =
document.forms[0].elements['urn:schemas-microsoft-com
ffice
ffice#CatLookup'];
while (S.options.length) S.options[0] = null;
</script>
-----------------------------------------
To rewrite the options "without double entries":
-----------------------------------------
<form>
<select tabindex="1"
name="urn:schemas-microsoft-com
ffice
ffice#CatLookup">
<option value="">(None)</option>
<option value="8">name 1</option>
<option value="10">name 2</option>
<option value="11">name 1</option>
</select>
<input type=submit>
</form>
<script type="text/javascript">
var N = new Object();
var S =
document.forms[0].elements['urn:schemas-microsoft-com
ffice
ffice#CatLookup'];
while (S.options.length) {
if (!N[S.options[0].text]) N[S.options[0].text] = S.options[0].value;
S.options[0] = null;
}
for (i in N) S.options[S.length] = new Option(i,N
);
</script>
-----------------------------------------
I define "removing double entries" as "removing options with the same
text" which is probably what you meant. The usual naming is <option
value="[VALUE]">[TEXT]</option>. The criterium that is used to remove
is not case sensitive.
When deleting a double entry, the one that comes first is kept with its
(albeit unique) value. If you want the last one to be kept, change
if (!N[S.options[0].text]) N[S.options[0].text] = S.options[0].value;
into
N[S.options[0].text] = S.options[0].value;
Do you really need a name as
"urn:schemas-microsoft-comfficeffice#CatLookup" for the select ? I
would counsel to change it into something shorter and more
alphanumericaloid.
There is a syntax error in your code at the double >> (at </OPTION>>).
Hope this helps,