Triggering The Execution Of Code With The Setting Of Object Properties
Sep 22, 2006
Subject line would seem to say it all:
How does one trigger the execution of a method within an object or any
other code/function with the setting of an object property?
More elaboration for those who want it:
Suppose we have anObjectType, with a property .description, whose value
can be a string, and the value of .description actually describes the
structure of anObjectType as a string. (The details are not important
about how the structure is described, but if you want something concrete,
think of 'anObjectType' as a DOM Node of type NODE_ELEMENT, and
..description as the property .innerHTML.)
When an instance of anObjectType is created, the value of description is
created with the instance. Indeed, the value of description may not be
set with the construction of anObjectType, but it might be added to the
prototype of anObjectType.
But the property .description is not merely read-only. Fetching the value
of .description returns the string which describes the structure of the
object in a meaningful way.
When .description is set with a value of type string, the string is
checked to see if it properly describes a legally formed structured for
anObjectType, and the instance (and only that instance) of anObjectType is
completely re-built: it might possibly be destructed and then re-
constructed, or all properties (but not methods) which involve descendant
objects are changed to conform to the described structure.
The question is, the setting of a string value of the property
..description of object anObjectType does not automatically trigger a
method/methods (or an exception??) for doing something (such as
restructing the object) as a result of the setting of an object property.
I want to programmatically list all properties of JS object from C++ code (I am using Mozilla's JSAPI). I know I can go up the prototype chain with JS_GetPrototype, then enumerate each object's own properties with JS_Enumerate.
how to add extra properties to html elements as I was storing data in html attributes. After looking at some others code including Raphael and this addEvent code. [URL] They seem to treat objects just like an array. obj[property] = value; This would have been extremely helpful to know previously as I have needed to be able to include variables in property names - but have resorted to making the whole thing a string and calling exec() on it.
I'm trying to create a script which allows multiple different tables to be shown on mouseover of an area (in this case, a table cell). However, I want the tables to appear in a long list for those who have JS disabled. For obvious reasons I don't want two copies of the tables in my html, and obviously only want the mouseover section to appear for those with JS enabled.
The basic problems I have so far is that I can't get the div "plaintables" (which contains all the tables) to be hidden when JS is enabled, and when I mouseover (activating scim()), I get the message [object HTMLTableElement] rather than the actual table.
Pretty much just starting out with Javascript, so this is probably something really simple I have done wrong.
Just incase it matters, I don't have access to the contents of the <head> tag (This is for a site with an existing template) - it would be easier if everything could be done in the <body> section.
I am dynamically building a part of my HTML page by setting the innerHTML of a DIV element. Immediately after I do that I try to retrieve the clientHeight and clientWidth of the DIV element in order to determine what height and width the element actually ended up being. But I always get 0 as both the height and width. The contents of the DIV, i.e. the HTML code that I inserted into it via the innerHTML, does indeed get displayed on the page. But I suspect that the browser doesn't actually update the page until AFTER my JavaScript code has completed and "returns control" to the browser.
Does that make sense? Is there any way I can force the browser to update the page BEFORE my code completes its processing, so that I can properly retrieve the width and height of the element I just inserted into the page?
I need to use self.scrollTo(x,y) as the last action in a js function called by a onClick event. It seems that the scrolling actually takes place, but the document is then scrolling back to top when js code execution has ended.
In the following example I get this effect in IE6 with the third and fourth calls, while the first two work fine. Code:
have a select element that has a function attached via onchange. The function does some AJAX using the HTML_AJAX library.
When I use Firefox, if I select an item in the list, then the code executes in a timely manner, which means that I see lines 1 and 2 of my debugging output (displayed at the end of this posting). The code then displays a wait window. A second or so later, I see the third and final line of debugging output when the AJAX call has completed. The wait window then disappears. Yaay!
However (and you knew that this was coming even without the "IE" tag in the subject header, didn't you?), with Internet Explorer, I see no debug output nor wait window until AFTER the AJAX call has completed one second or so later. Suddenly, every line of debug output is displayed and the code is executed. Boo!
"Hold on! Are you saying that your Javascript code isn't being executed until after the AJAX call?"
This is what I am seeing with Internet Explorer! Even if I insert an alert() message in the code, I do not see it until AFTER the AJAX call has completed, even though it appears in the code before the AJAX call. Then, I see my alert() message. I do not see the wait window because it is displayed and immediately closed during the rush of code that executes after the AJAX call has completed. The whole idea of the wait window is to display while the AJAX call is working.
I'm developing with jQuery quite long right now, but recently I spotted one big problem with execution of jQuery code in Safari and Chrome. So everything is working fine in these browsers until jQuery code is placed in one page. But when using for example tabs plug-in loaded with ajax and on this loaded page exists some extra jQuery code it isn't executed.Co page is loaded but nothing is happening with code which was included. This problem doesn't exists in IE, FF or Opera. It appears only in Safari and Chrome. The same problem is when I'm loading page with $.get, $.post or $.ajax query. So it doesn't affect tabs plug-in but overall functionality. I was checking that with latest versions of jQuery and UI today.
Until now I have used the javascript function eval(), wrapped it in a try / catch block and showen him the error message if the javascript code was flawed.But this comes with the problem that if there is no error the script will be executed.So what I´d like to is use the jquery function globalEval(), wrap it in a try / catch block and display the error message if the script does not run sucessfully as I have done before,BUT:if the script would execute without an error I´d like to use some kind of preventDefault so that the script would not be executed at all and instead I could show the user a message that the script passed validation.I know that the way I propose is not possible as the script has to be executed somehow so that possible errors are generated...does anyone have an idea how to do what i propose ?
I'm trying to build an image gallery and I want to shrink all the images a bit to allow for enlarging them on mouseover. I have it working fine locally, but when deployed to my server it doesn't work because the image files are still loading as the javascript executes. What I wind up with is the js using the image's alt tag's text size as the image size, which then gets resized to create a squashed image. What I want to do is preload all the thumbnail images before the the function to resize them gets called so the resize function has the proper dimensions of the images to do the transformation on. I'm using the jQuery.Preload plugin for my preloading functionality.
$(document).ready(function(){
[Code]...
My expectation of this code is that the enable_anim_resize() function will not be called until all the images are loaded, but I don't see any difference in this execution than if I just sequentially put in my resize code after the preload line and didn't use the onFinished callback for the preload method (example below:) $(document).ready(function(){ From my understanding of the documentation and examples of the preload plugin, the enable_anim_resize() function shouldn't be called until all images on the page are loaded, at which point the proper dimensions of these images should be available for correct resizing. Can anyone clue me in on what I'm missing here?
i'd like to know objects properties and/or methods.
saying i do have an object "o" being part of the dom (a div or an ul...) how could i list (introspection) all the properties and methods attached to this object ?
i know it is possible in javascript but don't remeber how to ...
Do many programmers remember most of the object properties and methods or do they use IDE or references to find those specific objects. I'm starting to learn Javascript and seeing all the different type of objects available can be depressing. :(
I am fairly familiar with the concept of Objects and their properties and methods, but javascript being object based as opposed to object oriented has me stumped on how to access an object's properties from an onclick event handler created for another object created within the original object.
In the example below, I have a constructor function called anyObj. to which I pass an object reference to an element.
anyObj has 3 properties and one function increaseWidth()
increaseWidth() creates a new button with an onclick event handler and this is where I have a problem.
The onclick function needs to increase the value of anyObj's this.width property. I originally had a line this.width += 10; in the onclick but quickly realised why this wasn't working because the this in the onclick function refers to the new button object and not the this.width property of anyObj.
The workaround I have used, and it works, is to make a copy of all the this.xxxxx properties. eg. width = this.width; and use the width variable in the onclick as you can see below. This "workaround" works fine but doesn't feel ideal to me.
So is there a better way to access the anyObj()'s properties from within the onclick function than the way I have done it? Obviously I would prefer to not have to make copies of all the anyObj() properties like I have to make them accessible to the onclick function.
Say x in a XML Http Request Object ... meaning it's either XMLHttpRequest (firefox) or ActiveXObject (IE)
This line of code works in firefox... x.someProp = "someValue"; alert(x.someProp);
But in IE I get "Object doesn't support this property or method" I need to place a custom property on the object. Is there any way I can do that in IE?
I've created an object and within this object, I've added an eventlistener. But the problem now is that after addEventListener is being called to access a callback function, the callback function is not able to access the properties within its own class. Code:
I am fairly familiar with the concept of Objects and their properties and methods, but javascript being object based as opposed to object oriented has me stumped on how to access an object's properties from an onclick event handler created for another object created within the original object.In the example below, I have a constructor function called anyObj. to which I pass an object reference to an element.
anyObj has 3 properties and one function increaseWidth()
increaseWidth() creates a new button with an onclick event handler and this is where I have a problem.The onclick function needs to increase the value of anyObj's this.width property. I originally had a line this.width += 10; in the onclick but quickly realised why this wasn't working because the this in the onclick function refers to the new button object and not the this.width property of anyObj.
The workaround I have used, and it works, is to make a copy of all the this.xxxxx properties. eg. width = this.width; and use the width variable in the onclick as you can see below. This "workaround" works fine but doesn't feel ideal to me.So, what I am asking advice on is, is there a better way to access the anyObj()'s properties from within the onclick function than the way I have done it? Obviously I would prefer to not have to make copies of all the anyObj() properties like I have to make them accessible to the onclick function.
Code:
function anyObj(divObj){ this.elem = divObj; this.width = 50;
Well, I've been working with JS for three years and have a great experience here. But! I still have no really acceptable answer to the following question:
What is the principle difference between declaring methods/properties in the constructor function body and via prototypes.
Are there any real GURUs? Let's discuss the issue.
In JavaScript 1.5, objects can use special getter and setter functions [1] for properties. However, these only seem to be implemented in Gecko and, AFAICT, don't seem to be part of ECMAScript.
Is there an alternative syntax I can use that is standardised in ECMAScript and also (preferably) interoperably implemented in several browsers? Or, do I have to use ordinary getFoo() and setFoo() functions. Code: