[jawsscripts] Re: The GetListOfFormFields function annd Delimiters

  • From: "Bryan Garaventa" <bgaraventa11@xxxxxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Thu, 24 Sep 2009 20:02:12 -0700

Weird, I'm not sure why they would have an input tag that had no type or 
name attribute, unless they were using to display something visually that 
wasn't processed when submitted.

The other type, type=hidden, is very common though. This is how variables 
are passed along with the rest of the form information when the form is 
submitted. These are hidden values, so none of these are displayed. You 
can't even set focus to these manually by calling the focus() method on the 
element. You could check the value attribute and name attributes of these in 
the script though, if you are curious about what types of values are also 
being passed with the form.


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


> Thanks Brian, that will make my code more reusable in the future!  Strange
> thing.  I found an INPUT element after the last visible graphic action
> button.  There are many elements in these forms that have a type="hidden",
> including 2 after the button.  The problem is that this INPUT element does
> not have a type, name or value attribute!  I looked through the HTML 
> source
> and could not find such an element.  Could it be finding a search box in 
> an
> IE Toolbar?  To eliminate this element, I changed your code to:
>
> if o.type == "password" then
>  SayMessage (OT_DEBUG, "password field found!  i = " + IntToString (i))
>  Let iFields = iFields + 1
> Elif ( o.type == "text"
> || o.type == ""  )
> && o.name != "" then
>  SayMessage (OT_DEBUG, "Text Edit field found!  i = " + IntToString (i))
>  Let iFields = iFields + 1
> ...
> EndIf
>
> Don Marang
> ----- Original Message ----- 
> From: "Bryan Garaventa" <bgaraventa11@xxxxxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Thursday, September 24, 2009 3:33 AM
> Subject: [jawsscripts] Re: The GetListOfFormFields function annd 
> Delimiters
>
>
>> Nothing too bad, just a tune up and some hardware removal.
>>
>> If there is no type attribute set, it's safe to assume that it is a text
>> field. There should not be any default maxlength however if none is
>> stated,
>> though there may be a visible size default, but I'm not sure what this is
>> if
>> so.
>>
>> If the input is type=image, then this would indicate the same lement type
>> as
>> type=button. The only difference is that type=image allows the displaying
>> of
>> an image instead of the default type=button display.
>>
>> Hope this helps,
>> Bryan
>> ----- Original Message ----- 
>> From: "Donald Marang" <donald.marang@xxxxxxxxx>
>> To: <jawsscripts@xxxxxxxxxxxxx>
>> Sent: Wednesday, September 23, 2009 12:13 AM
>> Subject: [jawsscripts] Re: The GetListOfFormFields function annd
>> Delimiters
>>
>>
>>> Thanks Brian,
>>>
>>> Hope you are feeling better!  I hope the surgery was something they were
>>> fixing and things are better now.  I have had more surgeries than I can
>>> count.  Many were not intended to 'fix' things.
>>>
>>> Does that if a form field is not specified as a particular type, that it
>>> is
>>> a "text" edit field by default?  Is it given a default size and Max
>>> length
>>> as well?  On a similar  note, if the INPUT element is specified as type 
>>> =
>>> "image", can it be anything other than a class = "actionbutton" element?
>>> It
>>> is true on these badly written mobile  pages, but can I generalize that
>>> statement?
>>>
>>> Don Marang
>>>
>>>
>>> ----- Original Message ----- 
>>> From: "Bryan Garaventa" <bgaraventa11@xxxxxxxxxxxxxx>
>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>> Sent: Wednesday, September 23, 2009 2:26 AM
>>> Subject: [jawsscripts] Re: The GetListOfFormFields function annd
>>> Delimiters
>>>
>>>
>>>> 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
>>>>
>>>
>>> __________
>>> 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: