You are here: Re: DOM event flow « HTML « IT news, forums, messages
Re: DOM event flow

Posted by Michael Winter on 11/13/14 11:48

On 24/05/2006 11:16, Spartanicus wrote:

> In trying to take it one step further I'd like the function to
> execute only when the window width changes.

The code only needs slight modification:

this.onload = function() {
var width = document.body.clientWidth;

document.body.onresize = function() {
if (document.body.clientWidth != width)
location.reload();
};
};

> First I should illustrate what I'm trying to do.
>
> Opera has a preliminary implementation of CSS3 media queries, this
> allows dissolving a multi column layout for narrower window widths.
> Currently the CSS media query isn't reevaluated on a window resize,
> it requires a reload [...]

Has that been reported to Opera? I don't know if the query /must/ be
re-evaluated, but it certainly should be.

[snip]

> After a glance in a JS book

Based upon informed third-party opinion, most books on scripting are
rubbish, unfortunately. I've never read any myself, but the other
regulars in c.l.javascript can just about recommend "JavaScript: The
Definitive Guide, 4th Edition"[1] (and some may only consider that the
least bad, rather than good).

> and not hindered by a proper understanding of JS & the DOM

:-)

> I tried:
>
> <script type="text/javascript">
> window.innerWidth.onresize = function() {
> location.reload(false);
> };

[snip]

Even if that onresize property persisted (see below), the innerWidth
property is not an element, it would not receive events, and so the
function would never be executed.

<off-topic>
The innerWidth property of the global object is simply a number (where
implemented) and has no members, nor can it be assigned any.

To illustrate the latter point, consider:

var number = 10;

number.property = 'value';
alert(typeof number.property);

The alert will contain 'undefined', not 'string'. The reason is that
only objects have properties. Though one may use methods with
primitives, what goes on behind the scenes is a little complex than it
may otherwise appear. For example,

var message = 'Hello %s!';

alert(message.replace('%s', 'World'));

message is a string primitive, but the code would still display 'Hello
World!'. What is actually happening is that in using dot notation, the
left-hand operand is implicitly converted to an object, similar to:

Object(message).replace(...)

which is equivalent (in this instance) to:

(new String(message)).replace(...)

The same thing occurs when trying to create a property on a primitive,
but because the implicitly created object is only temporary, the new
property disappears along with the object itself.

In the code you posted, a Number object will be created using the
innerWidth property, and a reference to a function object will be
assigned to a new property, onresize. However, because there are no
references to it, this Number object will be marked for garbage
collection, and the function object will soon follow suit.
</>

Hope that helps,
Mike


[1] Recommended books, c.l.javascript FAQ
<http://www.jibbering.com/faq/#FAQ3_1>

--
Michael Winter
Prefix subject with [News] before replying by e-mail.

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация