Connecting Tech Pros Worldwide Forums | Help | Site Map

Prioritize form field

Frowning Freezer
Guest
 
Posts: n/a
#1: Aug 28 '08
How can the function below be rewritten to prioritize form fields instead of
other objects with the same name?

For example I want getele("title") to retrieve the form field named "title"
instead of document.title - how do I get it to do that?

function getele(n, d){
//argument 'n' is the name of the object you want to get
//argument 'd' is the document object, it is not required
var p,i,x;
if (!d) {
d = document;
}
if ( (p = n.indexOf("?")) 0 && parent.frames.length) {
d = parent.frames[n.substring(p+1)].document;
n = n.substring(0,p);
}
if ( !(x=d[n]) && d.all) {
x = d.all[n];
}
for (i=0; !x && i < d.forms.length; i++) {
x = d.forms[i][n];
}
for (i=0; !x && d.layers && i < d.layers.length; i++) {
x = getele(n, d.layers[i].document);
}
if (!x && d.getElementById) {
x = d.getElementById(n);
}
return x;
}


Regards,
Allan Jensen



Safalra (Stephen Morley)
Guest
 
Posts: n/a
#2: Aug 30 '08

re: Prioritize form field


On Thu, 28 Aug 2008 16:41:35 +0200, Frowning Freezer wrote:
Quote:
How can the function below be rewritten to prioritize form fields instead of
other objects with the same name?
>
For example I want getele("title") to retrieve the form field named "title"
instead of document.title - how do I get it to do that?
>
function getele(n, d){
//argument 'n' is the name of the object you want to get
//argument 'd' is the document object, it is not required
var p,i,x;
if (!d) {
d = document;
}
if ( (p = n.indexOf("?")) 0 && parent.frames.length) {
d = parent.frames[n.substring(p+1)].document;
n = n.substring(0,p);
}
if ( !(x=d[n]) && d.all) {
x = d.all[n];
}
for (i=0; !x && i < d.forms.length; i++) {
x = d.forms[i][n];
}
for (i=0; !x && d.layers && i < d.layers.length; i++) {
x = getele(n, d.layers[i].document);
}
if (!x && d.getElementById) {
x = d.getElementById(n);
}
return x;
}

You can move the following if-block up in the function:

for (i=0; !x && i < d.forms.length; i++) {
x = d.forms[i][n];
}

This is, however, the wrong solution - rather than using this general
'getele' function which tries to find something somewhere in the document
with the appropriate element type/name attribute/id attribute, it would be
better to search only within the specific namespace required (form field
name, in this case).

--
Safalra (Stephen Morley)

A Colour Picker Widget For javascript:
http://www.safalra.com/web-design/ja...colour-picker/
Thomas 'PointedEars' Lahn
Guest
 
Posts: n/a
#3: Aug 31 '08

re: Prioritize form field


Safalra (Stephen Morley) wrote:
Quote:
On Thu, 28 Aug 2008 16:41:35 +0200, Frowning Freezer wrote:
Quote:
>How can the function below be rewritten to prioritize form fields instead of
>other objects with the same name?
>>
>For example I want getele("title") to retrieve the form field named "title"
>instead of document.title - how do I get it to do that?
>>
>function getele(n, d){
> //argument 'n' is the name of the object you want to get
> //argument 'd' is the document object, it is not required
> var p,i,x;
> [...]
> for (i=0; !x && i < d.forms.length; i++) {
> x = d.forms[i][n];
> }
> [...]
> if (!x && d.getElementById) {
> x = d.getElementById(n);
> }
> return x;
>}
>
>
You can move the following if-block up in the function:
Then the priority of it as compared to now would be *lower*, because
execution does not return after the assignment. So the *last* assignment
wins. So it should be moved down instead, but ...
Quote:
for (i=0; !x && i < d.forms.length; i++) {
x = d.forms[i][n];
}
>
This is, however, the wrong solution [...]
.... ACK, in double meaning.


PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Closed Thread


Similar JavaScript / Ajax / DHTML bytes