[jawsscripts] Re: The GetListOfFormFields function annd Delimiters

  • From: "Bryan Garaventa" <bgaraventa11@xxxxxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Tue, 22 Sep 2009 23:26:17 -0700

Hi, sorry for not getting back sooner, I recently had surgery, so have been 
out of commission.

The short answer is that not using a type attribute within an input element 
is bad coding.

Since you are scripting someone elses page though, and only some of the edit 
fields don't contain a type attribute, then you could check for the 
following using the o object as mentioned before...

if o.type == "text" || o.type == "" then
; then o is an edit field
endif

hope this helps.
Bryan

----- Original Message ----- 
From: "Donald Marang" <donald.marang@xxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Friday, September 18, 2009 4:32 PM
Subject: [jawsscripts] Re: The GetListOfFormFields function annd Delimiters


> Thanks Brian,
>
> I ended up using your method in a function that gathers all of the
> information I was looking for at one time.  I now use this loop starting 
> at
> the last element and working backwards.  While in the loop, I count the
> buttons, and password / edit fields on the page. It passes back the Edit
> Field count, the  name of the first edit field, the count of buttons, and
> returns the object pointer of the first button as the return value.
>
> I could not figure out how to identify an Edit field.  The Edit fields
> sometimes only have a name attribute.  Currently the function only
> identifies the username and search edit fields by name!  Not a
> generic,portable solution.  Does anyone know a better way to identify an
> Edit field? Would there be an attribute that would always be null in a 
> form,
> but all other control types in the form     would return something?
>
> Perhaps I should just pass back the object pointer of the first Edit field
> as well and return all information as parameters by reference to make it
> more generic.  That way it might be more useful in other cases.  As it is, 
> I
> call this function 3 times in this application.  I will paste the function
> below in case anyone is interested.  I welcome all comments so that I can
> eventually learn how to script right.
> Object Function FieldInfo (int ByRef iFields, string ByRef sFirstEdit, int
> ByRef iButtons)
> Var
> Object dom,
> Object array,
> Object o,
> Int l,
> Int i,
> Object oEdit,
> Object oButton,
> String sName
> let dom = IEGetCurrentDocument()
> let array = dom.getElementsByTagName("input")
> Let l = array.length
> let i = l
> Let iFields = 0
> Let iButtons = 0
> SayMessage (OT_DEBUG, "length = " + IntToString (l))
> while i >= 0
> let o = array(i)
> if o.type == "password" then
>  SayMessage (OT_DEBUG, "password field found!  i = " + IntToString (i))
>  Let iFields = iFields + 1
>  Let oEdit = o
>  Let sFirstEdit = o.name
> ElIf o.class == "actionbutton" then
>  SayMessage (OT_DEBUG, "Action button found!  i = " + IntToString (i))
>  Let sName = o.value
>  SayMessage (OT_DEBUG, "value = " + sName)
>  Let iButtons = iButtons + 1
>  Let oButton = o
> ElIf o.type == "image" then
>  SayMessage (OT_DEBUG, "Button Image found!  i = " + IntToString (i))
>  Let sName = o.value
>  SayMessage (OT_DEBUG, "value = " + sName)
>  Let iButtons = iButtons + 1
>  Let oButton = o
> ElIf o.name == "userName" then
>  SayMessage (OT_DEBUG, "Username field found!  i = " + IntToString (i))
>  Let iFields = iFields + 1
>  Let oEdit = o
>  Let sFirstEdit = o.name
> ElIf o.name == "testInput" then
>  SayMessage (OT_DEBUG, "Search field found!  i = " + IntToString (i))
>  Let iFields = iFields + 1
>  Let oEdit = o
>  Let sFirstEdit = o.name
> endif
> Let i = i - 1
> EndWhile
> SayMessage (OT_DEBUG, "Edit field count = " + IntToString (iFields))
> SayMessage (OT_DEBUG, "First Edit field = " + sFirstEdit)
> SayMessage (OT_DEBUG, "Button count = " + IntToString (iButtons))
> Let sName = oButton.value
> SayMessage (OT_DEBUG, "Button value = " + sName)
> Return oButton
> EndFunction
> Don Marang
>
> ----- Original Message ----- 
> From: "Bryan Garaventa" <bgaraventa11@xxxxxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Tuesday, September 15, 2009 7:17 PM
> Subject: [jawsscripts] Re: The GetListOfFormFields function annd 
> Delimiters
>
>
>> You could do something like the following to loop through all relevant
>> password form fields...
>>
>> var object dom, object array, object o, int i
>> let dom = IEGetCurrentDocument()
>> let array = dom.getElementsByTagName("input")
>> let i = 0
>> while(i < array.length)
>> let o = array(i)
>> if o.type == "password" then
>>
>> ; here is each instance of a password field within the o object.
>>
>> endif
>> let i = i + 1
>> endWhile
>>
>> ----- Original Message ----- 
>> From: "Donald Marang" <donald.marang@xxxxxxxxx>
>> To: <jawsscripts@xxxxxxxxxxxxx>
>> Sent: Tuesday, September 15, 2009 2:58 PM
>> Subject: [jawsscripts] The GetListOfFormFields function annd Delimiters
>>
>>
>>>I have been attempting to determine the number of Edit fields on a web
>>>page.  I have tried to pull that information from the DOM, but I am not
>>>grasping how to create a collection of edit / password fields.  As a
>>>backup, I attempted to use the GetListOfFormFields function.  I can use
>>>this function and then pass the returned string to the
>>> DlgSelectItemInList  function without any problems.  The
>>> DlgSelectItemInList  function will display the list showing and
>>> separating
>>> the segments properly.  However, the GetListOfFormFields function has a
>>> delimeter as the first parameter, it does not use the delimeter
>>> specified!
>>> Therefore, I can not use StringSegmentCount to determine how many
>>> segments
>>> are in the list.  I wrote my own MyStringSegnentCount before I noticed
>>> that the GetListOfFormFields is at fault instead and does not use the
>>> delimiter as the documentation suggests.  Does anyone know how the
>>>
>>> DlgSelectItemInList  function determines how to split up the segments?
>>> Is
>>> there a error in my logic or use in the test example below?  Can anyone
>>> suggest a robust method to obtain the number of edit / password fields
>>> visible on a web page?
>>>
>>>
>>> Here is a test function demonstrating the improper use of delimiters
>>> returned in the GetListOfFormFields:
>>> Script SegmentTest ()
>>>
>>> Var
>>>
>>> String sTestString,
>>>
>>> String sDelimiter,
>>>
>>> Int iSegments
>>>
>>> Let sDelimiter = "|"
>>>
>>> Let sTestString = "UserID/ email: Edit|password Edit| line 3 \tEdit"
>>>
>>> Let sTestString = GetListOfFormFields (sDelimiter , WT_EDIT)
>>>
>>> ; InputBox ("Enter new string: ", "Here is the full string!",
>>> sTestString)
>>>
>>> Let iSegments = StringSegmentCount (sTestString, sDelimiter)
>>>
>>> SayInteger (iSegments)
>>>
>>> EndScript
>>>
>>>
>>> Don Marang
>>>
>>>
>>> __________
>>> Visit and contribute to The JAWS Script Repository 
>>> http://jawsscripts.com
>>>
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>
>> __________
>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>
> __________
> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
> 

__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: