Connecting Tech Pros Worldwide Help | Site Map

How to check if an object has defined setter?

 
LinkBack Thread Tools Search this Thread
  #1  
Old August 27th, 2008, 07:45 PM
Piotr K
Guest
 
Posts: n/a
Default How to check if an object has defined setter?

Hi!

Ok, so I have small problem and can't find solution to it.. Is there
any way to check if an object has defined setter? In other words - if
it's value can be changed?

Small example:

var el = document.getElementById('element');

el.style = "smth";

Browser will throw exception, I can use try..catch but is there way to
just write a function like hasSetter() ?

Thanks fo help!

  #2  
Old August 27th, 2008, 09:25 PM
dhtml
Guest
 
Posts: n/a
Default Re: How to check if an object has defined setter?

Piotr K wrote:
Quote:
Hi!
>
Ok, so I have small problem and can't find solution to it.. Is there
any way to check if an object has defined setter? In other words - if
it's value can be changed?
>
Small example:
>
var el = document.getElementById('element');
>
el.style = "smth";
>
Browser will throw exception, I can use try..catch but is there way to
just write a function like hasSetter() ?
>

To look up a setter in environments that support that:
if("__lookupSetter__" in el.style
&& el.style.__lookupSetter__("color")) {

}

But that would not tell you if the value can be changed, or what
acceptable values are. You'd just have to know it. For example, given el
is an HTMLElement:-

el.style.color = null;

Would be a mistake.

If there were edge cases that couldn't be eliminated, you could use
try/catch. But that would add clutter and slow the program down.


Garrett

  #3  
Old August 27th, 2008, 09:55 PM
Thomas 'PointedEars' Lahn
Guest
 
Posts: n/a
Default Re: How to check if an object has defined setter?

Piotr K wrote:
Quote:
Ok, so I have small problem and can't find solution to it.. Is there
any way to check if an object has defined setter? In other words - if
it's value can be changed?
No, but you can test whether the value changed after you tried.
Quote:
Small example:
>
var el = document.getElementById('element');
>
el.style = "smth";
>
Browser will throw exception,
BAD. The `style' property of element objects is implemented as a reference
to an object, and its interface specifies it as being read-only.
Quote:
I can use try..catch but is there way to just write a function like
hasSetter() ?
No. Adhering to standards stands the best chance of not throwing an
exception here.

<http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle>


PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f806at$ail$1$8300dec7@news.demon.co.uk>
  #4  
Old August 28th, 2008, 10:15 AM
Laser Lips
Guest
 
Posts: n/a
Default Re: How to check if an object has defined setter?

On Aug 27, 10:50 pm, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Quote:
Piotr K wrote:
Quote:
Ok, so I have small problem and can't find solution to it.. Is there
any way to check if an object has defined setter? In other words - if
it's value can be changed?
>
No, but you can test whether the value changed after you tried.
>
Quote:
Small example:
>
Quote:
var el = document.getElementById('element');
>
Quote:
el.style = "smth";
>
Quote:
Browser will throw exception,
>
BAD. The `style' property of element objects is implemented as a reference
to an object, and its interface specifies it as being read-only.
>
Quote:
I can use try..catch but is there way to just write a function like
hasSetter() ?
>
No. Adhering to standards stands the best chance of not throwing an
exception here.
>
<http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineS...>
>
PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f806at$ail$1$8300d...@news.demon.co.uk>
Do what ever you need to try and do in a try and catch statement ...
e.g

var worked = false;
try
{
var el = document.getElementById('element');
el.style = "smth";
worked=true;
}catch(e)
{
//in here you can alert(e.message); or set an internal error message
}
if(worked==true)
{
//worked
}else{
//didnt work
}


 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,989 network members.