Sub-object Callback Handler Changes 'this'?
Oct 3, 2010
I have simplified the problem - see image.[URL]I instantiate object obj1 which inturn instantiates subObj1. subObj1 is a slave to obj1. obj1 registers a handler function called method1 with subObj1 so that subObj1 can tell obj1 when it has finished.For example: call subObj1.subMethod2() to get the sub object to do something.subObj1 calls subMethod1 when its finished with its task, which inturn causes method1 to be called.
If I call method1 directly from obj1 'this' refers to obj1.However when method1 gets called by the subObj1 through the event handler mechanism,I find that 'this' has been changed to refer to subObj1.This is a problem as now method1 has lost all connection with its object obj1.If I define method1 within the 'Class1' function, I can get it to work if I use the 'var me = this;' trick, but if you have lots of methods within Class1() with further nesting this can get a bit hard to read.So, can someone tell me how to deal with 'this' changing. I.e. I want 'this' to refer to obj1 within method1.
<html>
<body>
<script type="text/javascript">
[code]....
On another note, there seems to many ways of defining methods (e.g using 'prototype' etc etc) and I gettting sick and tierd of a 'trial and error' approach to get things working. Can anyone recomend a good resourse that sets out the best way to design with javascript so I dont keep running into these issues.
View 5 Replies
ADVERTISEMENT
Aug 17, 2010
Did any one use bind inside for-in loop? In my case it never work correctly whatever I do.I'm trying to go through a collection of objects using for-in and bind MouseEnter handler for each object.What happened is the handler I bound to the last object works for all the objects?!
View 2 Replies
View Related
Jan 3, 2006
I've been playing around with JS for a while, but I've not ever found fantastic learning resources. I'm comfortable with other programming languages, so I'm very interested in OOP programming for JS, and I've started to use tools like the Prototype library for that purpose.
However, one problem has consistently caused me problems whenever I'm writing a JS Class. How can I get a reference to the specific class instance from inside an event handler that I create with a class method. Let me give an example of what I want to do:
(This code is using the Prototype library...)
myClass = Class.create();
myClass.prototype = {
makeLink: function(obj) {
// Out here, "this" refers to the instance of the myClass Class
obj.innerHTML = ''
obj.onclick = function() {
// In here, "this" refers to the clicked on element.
// How do I get a reference to the instance of myClass in here?
}
}
Here's the best way that I know how to do this right now. It seems to work in Firefox alright, but doesn't seem to work in IE:
myClass = Class.create();
myClass.prototype = {
makeLink: function(obj) {
obj.innerHTML = ''
self = this; // Save a reference to class instance as "self"
obj.onclick = function() {
// Self is evaluated to instance reference at time of assignment to onclick
self.linkClicked();
}
linkClicked: function() {
// Do something useful here
}
}
Is there a more elegant way to do this? I could just create all of my event handlers for objects outside of the class in procedural code where I already have a reference to the class object, but I like to wrap these things up inside the class, because sometimes they get significantly more complicated than this very simple one. Anybody have any solutions? This has to be a common design pattern...
View 8 Replies
View Related
Apr 27, 2007
I'm creating a list with buttons that show and hide some of the list elements to create the effect of scrolling. I've built an scrollList object so I can apply this to any list. When you create the object and pass it the id of the <ul> and how many items of the list you want to be displayed. It will add the scroll down and scroll up links and add an Event.observe to them (I'm using the Prototype library).
This code creates the object
var main_news_articles;
main_news_articles = new scrollList('main_news_articles', 5);
main_news_articles.init();
The problem I am having is with the callback functions of the onclick event of the links (scrollUp and scrollDown). The this keyword within these functions is refering to the link and not the object.
To try and solve this I've made the title attribute of the link the same as the variable name of the scrollList object. I can reference the scrollList object like so Code:
View 2 Replies
View Related
Sep 2, 2006
I have the following Javascript code
function Obj()
{
obj.squares = new Array();
}
Obj.prototype.Load= function(xdoc)
{
var goat = "head";
xdoc.ProcessNodes("squares/square", function(node)
{
alert(goat); // <-- this works fine
this.squares.push(
// do processing on node, create a square
);
});
}
Now the xdoc is another object I have, with a method called
ProcessNodes. The only important thing to know about ProcessNodes is
that it does some things, and calls its second argument (which is a
function) successively.
The problem I am running into here is once I get into the callback
function, "this.squares" is returning null ... even though it has been
initialized to an Array. For whatever reason, its like the object loses
scope when I get into the callback function. For all other intents and
purposes however, the callback function has the same scope as the
calling block (i.e. the goat variable is still accessible).
View 1 Replies
View Related
Feb 8, 2011
I am looping through an array of objects and creating an <li> element for each one and appending to a <ul> in the DOM. Works fine.During the looping I am also attached a 'details' object as data for the list element:$(thisListItem).data('details',{<obj>});Later, I am using the selector:$('ul#images_list li')to attach an on click function for each <li> element.In the click handler I am reading the data 'details' object for the <li> element:dataDetails = $.data(lotImage,'details');and, using the jAlerts plugin, I am opening a jPrompt which asks for the user to enter a price.
The jPrompt call includes a callback which receives the entered value as a parameter. The callback uses the value to 'post' the updated value, via $.ajax, to a server side unction.After OK is clicked in the jPrompt popup, in Firebug, I get an error that the dataDetails is undefined and it lists the line number in the click handler where I originally read the data object from the <li> element.I don't really understand why it should care after the click event has fired and the jPrompt callback has been invoked
View 3 Replies
View Related
Aug 10, 2007
I'm currently working on a project using Ajax (just for a little background) bascially I click on a button and it loads the editing tool on the paragraph tag i've clicked on (well thats the idea). The ajax bits themselves aren't the problem I appear to have a this.elementId in my class loosing data or becoming undefined somehow. Code:
View 7 Replies
View Related
Apr 13, 2010
I use the getJSON request to fill a select (with cities names) after the user have choosen his region.
I paste some code:
The problem is that callback is never called. I used firebug and i have seen that when i change region the getJSON function is called and my script (python) return this JSON:
Why my callback is not called? I can't even get the alert ('callback time!'). I thinked that my json could be broken, but firebug net console read and parse it very well, so i think is valid JSON.
I also tried to split up the function declaration from the getJSON request, but it's no use.
View 5 Replies
View Related
Jul 28, 2011
I have the following code. This code is working fine in FF but not in IE.
View 3 Replies
View Related
Jul 23, 2005
I'm seeing surprising behavior, consistent across Opera, Firefox, and IE.
An event handler is changing the value of an element, and there is apparently
no Change event being generated for the element. A simple illustration is,
make an INPUT element with an onchange; type in a new value, the Change
event handler is called. But make a button whose Click handler changes the
value, and the Change handler does not get called.
It appears that events are not generated while an event handler is running.
Can this be true?
View 3 Replies
View Related
Aug 11, 2005
How can I interrupt the enter key so it won't trigger unwanted events on my
web page? I have tried this:
var defaultEventHandler = obj.getEvent("onkeydown");
var myEventHandler = function(event){
if(event.keyCode==13){
alert(obj.getProperty("selection/index"));
}
else{
defaultEventHandler.call(this, event);
}
}
obj.setEvent("onkeydown", myEventHandler);
But it won't even enter the function.
View 3 Replies
View Related
Oct 20, 2005
I am trying to handle my mouse movements myself in my JavaScript
application which is ok except for the following problem.
If I happen to click on an image and then move the mouse, the "no-drop"
icon appears as the browser is starting to drage the image url
somewhere. When this happens, I no longer recieve any mouse events in
my JS app. This can be prevented in IE by adding an event handler for
the onDrag event that simply returns false. This prevents IE from
continuing to try and drag the image and instead it continues to send
mouse events.
However, I cannot find a way to do this in Firefox. Can anyone help?
View 2 Replies
View Related
Mar 28, 2010
When using variables in click handlers, is there a way to use the value of the variable when the handler was setinstead of run? For example:
var links = new Array;
for (i = 0; i < 5; i++) {
links[i] = document.createElement('span');
$("body").append(links[i]);
[Code]....
All five of the "Click here!" create an alert with the number 5, which was the last value iwas. How can I have each click function use the value of iwhen it was looping through (0, 1, 2, 3, 4)?
View 1 Replies
View Related
Apr 5, 2011
I got following document:
When you click the main button, will one of the six images get a background image, and you can then press the image with the background image, and get your "reflextime".
But it won't work. When I press the image, were the new background image has shown, you can click on it and get your time - why?'
View 8 Replies
View Related
Feb 1, 2007
I'm having a problem with the returning a php variable from my ajax php handler.
I call the handler...
if(ajaxRequest.readyState == 4 || ajaxRequest.readyState == 0){
var ajaxDisplay = document.getElementById('ajaxDiv');
var refreshID = "";
var timeout = "<?=$timeout?>";
ajaxDisplay.innerHTML = ajaxRequest.responseText;
//Change Refresh Timeout Based on Remaining Song Length
refreshID = setTimeout("DoRefresh()", timeout);
DoRefresh() function is the ajax function. What am I doing wrong?
View 12 Replies
View Related
Jan 12, 2006
I try to add a function to be triggered also within an event (which already has a function). I coded it, unfortunatelly one line of the code should be different for IE and Moz. I try to find a common way without using a browser detector... Any ideea? The red line works for Mozilla, the blue one for IE:
function addFunc(){
var e = document.getElementsByTagName('*');
for(var i=0;i<e.length;i++){
if(e[i].getAttribute('onclick')||e[i].getAttribute('onclick')!=null){// Moz || IE
//var f = new Function(e[i].getAttribute('onclick'));
var f = e[i].getAttribute('onclick');
e[i].onclick=function(){f();otherFunction()}
}}} Code:
View 6 Replies
View Related
Oct 19, 2005
I have no problem attaching an event handler to a single anchor labelled with an id. But I can't get the following to work on all anchors, meaning nothing happens. Any idea about what's wrong here? Code:
View 1 Replies
View Related
Oct 31, 2005
I need to convert
<div onmouseover="mousehand(event,'outerjob123');">
to a javascript call, ie.
x = document.createElement("div");
id = 123;
x.onmouseover = mousehand(event, 'outerjob' + id);
However, the syntax doesn't seem quite right, can someone enlighten me?
View 2 Replies
View Related
Dec 14, 2006
Im using onKeyUp on a text input field and everytime some information is gathered from a database through ajax.
Is there anyway to cancel onKeyUp events that are within X seconds of the previous event trigger? I dont want to use setTimeout because i dont want them called at all.
View 4 Replies
View Related
Jan 11, 2010
I modified a particular page in the following way:
I ran an init function on window.onload, which iterated thorugh the checkboxes on the page and assigned an event handler function - let's call it validate() to each checkbox.
I tested it in the big 5 browsers and ran into a strange issue in I.E. only -
let's say there are the following checkboxes code...
When I click on "box1" the function is not called. When check "box2" the function is called but by "box1", when I click on "box3" the function is called by "box2" and so forth...
View 6 Replies
View Related
Mar 30, 2010
I'm finishing up the front-end of an events management application, but I'm running into a problem with my javascript.
Here's the scenario: I have the php application returning all event details into a JSON object.
The object structure looks like this:
Code:
Each event title listing on the calendar grid is assigned "#" plus the event's ID for it's link, just for testing purposes--no problems.
Eventually, I want the user to get a yui container (modal) with the event details, but when I add the onclick handler to the links, the id that gets passed for each of the links is the same, 60 (which is the ID of the last iteration in the loop).
Here is my code:
Code:
I've tried using the var keyword to localize the id, but that produced the same problem.
View 2 Replies
View Related
Jan 24, 2009
I'm writing a base class for a project and one of the class's prototypes encapsulates cross browser event listening. One point of confusion is that removeEventListener requires that you know the handler. I don't have this info because I'm creating anonymous functions, so how do I do it?Here's the code:
javascript Code:
Original
- javascript Code
[code]....
View 1 Replies
View Related
Nov 19, 2011
I just got this script for a countdown on a website and I got it to work locally but when I upload it to the server i get the error "index.html:22 Uncaught TypeError: Object [object Object] has no method 'fancycountdown'".
I have checked to make sure all other javascript files are loading and they are and I can't figure out whats wrong. You can see it [URL]
View 2 Replies
View Related
Dec 8, 2005
Our project has thousands of web pages.
We have certain default chores we would like to occur as part of the
onload handling for all of these pages.
Rather than modify every page to say
window.attachEvent("onload",defaultChores);
is there some neat way to perhaps tap into the page-loading process so
that the above attachEvent call gets performed implicitly ?
Perhaps this involves some sort of server intervention. That is a
possibility for us, as we have access to the server as well (it's
typically a tomcat server), although admittedly if this is the only way
to do this, then this discussion should quickly migrate out of the
javascript newsgroup and into some sort of web server one.
View 1 Replies
View Related
Nov 22, 2006
I'm trying to dynamically create an image map for a particular image on my website, and I'm running into an issue where I try to register the "mouseover" and "mouseout" events for the AREAs of my image map.
Here is an abbreviated version of my code:
View 4 Replies
View Related
Jul 20, 2005
I want to change the event handler for a form field, using JS code. But
there doesn't seem to be a way to reference it. MyForm.SomeField.onChange
is undefined. Anyone know if there's a way to do this?
View 1 Replies
View Related