Javascript error headache: object doesn't support this property or method

  • Thread starter news.onetel.net.uk
  • Start date
N

news.onetel.net.uk

I and my friend Karl have spent literally all day trying to find out what is
causing my error but we are zapped of any further functionality :)

I have a form that adds news records. You select 'City' then you select
'Business Category' - now when you select 'Business Category' the next
drop-down menu (business sub category) should populate with 'Business
Sub-categories' related to the 'Business Category' but once 'Business
Category' is selected I get the javascript error:

Line: 98
char: 25
error: object doesn't support this property or method
code: 0

Can anyone save us?

This is the URL: http://www.workwise-ely.org/directory/add.php

This is the siurce: http://www.workwise-ely.org/directory/form.txt



On the 'business_category' I am using


onchange="this.form.ac.value='delete';this.form.submit()


Many thanks
 
G

Grant Wagner

news.onetel.net.uk said:
I and my friend Karl have spent literally all day trying to find out what is
causing my error but we are zapped of any further functionality :)

I have a form that adds news records. You select 'City' then you select
'Business Category' - now when you select 'Business Category' the next
drop-down menu (business sub category) should populate with 'Business
Sub-categories' related to the 'Business Category' but once 'Business
Category' is selected I get the javascript error:

Line: 98
char: 25
error: object doesn't support this property or method
code: 0

Can anyone save us?

This is the URL: http://www.workwise-ely.org/directory/add.php

This is the siurce: http://www.workwise-ely.org/directory/form.txt

On the 'business_category' I am using

onchange="this.form.ac.value='delete';this.form.submit()

Many thanks

I see onchange="form.pr.ac.value='pr';form.pr.submit()" for the
business_category, not what you've got listed above.

Presumably you mean "this.form.pr.ac.value....", but "pr" is not a property of
the form, it's the id of the form, and "this.form" gives you a reference to that
form, the id is not required.

So, to set the value of another input you'd use
onchange="this.form.ac.value='whatever';this.form.submit();"
 
M

Michael Winter

I have a form that adds news records. You select 'City' then youselect
'Business Category' - now when you select 'BusinessCategory'the next
drop-down menu (business sub category) shouldpopulate with'Business
Sub-categories' related to the 'BusinessCategory' butonce 'Business
Category' is selected I get thejavascript error:

You shouldn't be doing it with JavaScript if you have server-side support.
To do so will make your page needlessly dependent upon JavaScript. It's
also unwise to automatically submit a form when someone changes a value in
a SELECT element. This is because two methods of changing values, by
keyboard and by mouse wheel, result in several change events. Furthermore,
a user can't change their minds or make a correction. Instead they have to
wait for the server response before they can try again. Lastly, if they
stop the submission, but then realise that it was the most appropriate
option, they can't continue because they already have that value selected
and selecting it again won't fire an event. Instead, they have to select a
different option before reselecting[1].
Line: 98
char: 25
error: object doesn't support this property or method
code: 0

Can anyone save us?

Well you can start by using a different browser for debugging and testing
documents. IE is a lowsy browser. Be sure to use a better one like Mozilla
or Opera before deploying a page. Despite being more standard's compliant,
these browsers offer better script error feedback by default (no updates
required).

[snip]
On the 'business_category' I am using

onchange="this.form.ac.value='delete';this.form.submit()

Actually, you're not. The error Opera shows me is:

http://www.workwise-ely.org/directory/add.php
Event thread: onchange
Error:
name: TypeError
message: Statement on line 1: Expression evaluated to null or
undefined and is not convertible to Object: form.pr
Backtrace:
In unknown script
form.pr.ac.value = "pr";
At unknown location
{event handler trampoline}

Searching for that code, I find:

onchange="form.pr.ac.value='pr';form.pr.submit()"

By the way, the more standards-compliant way to reference forms and form
controls is through the forms and elements collections:

onchange="this.form.elements['ac'].value='pr';this.form.submit();"

But, as I said above, you should drop that whole thing anyway.

Now we have that sorted, on to other matters...

Minor points

I'd change the images (Business and Enterprise, and Investors In People)
so that they don't shift down when hovered. It looks like something went
wrong when you altered them.

At the bottom of the page, it states: "This website is compliant in: XHTML
| CSS | WAI-AAA". It isn't valid XHTML, and I couldn't check the CSS
because the mark-up was broken. Don't claim these things if they're
untrue. Also, it should probably read, "This website complies with the
following standards: ...".

Overall, there are seven spelling and grammar mistakes in the "In
Associating With..." section.

The name for electronic messages is "e-mail", not "email".

Technical matters

I don't know why your script expends so much energy on code to open new
windows. New windows are a Bad Thing. Don't use them. Pop-up blockers also
make them unreliable.

Steer clear of Dreamweaver generated JavaScript code. It's nasty. I'd
personally recommend steering clear of Dreamweaver, but that may not be an
option. By the way, I hope nothing ever goes wrong with YY_checkform(). :)

Please learn to use feature detection. Just because a browser supports
document.getElementById doesn't mean it supports every W3C-specified
object and method. Similarly, it isn't just IE that provides the
document.all collection. See the group FAQ, specifically section 4.26 and
its links. <URL:http://jibbering.com/faq/>

This goes with the previous point, but it deserves some extra attention.
Your CSS switcher is a bad idea. Not all browsers support the
document.styleSheets collection, thereby rendering the entire function
worthless. Instead, use the intended method of stylesheet switching:
alternate stylesheets. All good browsers will allow the user to switch the
active stylesheet using some built-in method. IE, being a terrible
browser, does not, so your function still serves a purpose in augmenting
that particular browsers failings. Still, it requires feature detection.

Mike


[1] This last case happened to me on another site just 10 minutes ago. So
yes, these things do occur.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top