Object References When Using Bound Event Handlers
Feb 27, 2007
THE QUESTION: How do I get a reference to my Object when processing an
event handler bound to an html element ?
CONTEXT:
Sorry if it is a bit long.
I am developing a JS calendar tool. One of the requirements is that the
calendar will need to display a varying number of months (1..3)
depending on the calling page. Imagine 1, 2 or 3 calendar pages side by
side as required.
I have built a grid object that will contain one month's dates with the
day names at the top. The calendar object inherits the grid object as an
array of "calendar pages" - one grid per month and the calendar provides
the content for each grid. I will use the grid object for another
completely different object later and so I want to use good OOP
encapsulation. The grid is a table generated on the fly and is "dumb" as
far as what it is used for.
I have attached an onlick event to each cell of the grid. Using OOP
priciples I want the calling program (the calendar object in this case)
to provide a function to handle the click and the grid object will
provide to the calendar the row and column of that cell as well as the
grid number (so the calendar can work out which date was clicked since
it knows what the data means and the grid doesnt). Code:
View 6 Replies
ADVERTISEMENT
Dec 17, 2005
I am a bit new to JavaScript objects, I have the following object:
LinkTest=function() {
// init
}
LinkTest.prototype.eventHandler=function(){
// the call below fails, as 'this' refers to the link that
// generated the event, and not the instance of LinkTest object
this.doSomething();
}
LinkTest.prototype.register=function(link){
link.onclick = this.eventHandler;
}
LinkTest.prototype.doSomething=function() {
// do something!
}
So basically when you register a link, the onclick event handler gets a reference to LinkTest's eventHandler function. Now when the user clicks on the link, the 'this' refers to the link... how do I reference the instance of LinkTest object from within the eventHandler function?
View 2 Replies
View Related
Mar 30, 2010
i got an ajax script that appends a new form as the user perform some actions.then i bind them to the 'submit' event. the problem is that the existing forms get bound again and now submit twice, while the newly appended forms submit once.
is there a function to check if that form has already been bound, so that i won't bind it again? in the docs there's a unbind(). But will it slow down if i append more and more forms?
View 2 Replies
View Related
Mar 9, 2003
I am trying to make a function that checks/unchecks a checkbox when a specific <td> is clicked. I need to use this same function for several checkboxes in the page so I want to just pass it the name of the checkbox I want to affect as a variable and use it in the object reference lines. BUT, this doesn't work. I can pass the variable to the function as I've used alert(variable) to test this. But it doesn't work when I put it in a line like this "document.forms[0].variable.checked=true;". Code:
View 4 Replies
View Related
Aug 24, 2011
I create buttons from an array of objects that such as:
buttons = [{ text: "button 1", action: 1}, {text: "button 2", action: 2}];
I then loop thru the array to assign the text and bind the click event after having created the buttons with IDs of "button_<index>".
for( var index in buttons ) {
$("#button_"+index).html ( buttons[index].text )
.click( function() { clickButton( buttons[index].action ) } );
}
The text appears correctly in the button, but every button defined only fires the list bound click, in this example the action equal to'2'whether I push "Button 1" or "Button 2".My actual case has four buttons, all firing the event for the fourth button.I've tried not chaining the .click(), going thru the loop twice once for the .html and once for the .click, neither of which made a difference. If I hard code each button .click, it works fine.
View 2 Replies
View Related
Aug 22, 2010
I have some confusion about the scripts below:
1) is getRule a local variable or global variable, as it has no var keyword, yet it is an inner function of Validation? So without var, I think global, but being an inner function, I think local. So I'm not sure which.
2) In this line of code: var rule = $.Validation.getRule(types[type]), getRule returns rules, which is just a local variable in Validation. I always see that you return functions, but how does returning a local variable that's just an object literal and not a function be able to return true or false? Now the value of rules is an object literal, and this object returns true or false. So we are basically allowed to use return keyword with local variables that are object literals and not functions?
3) In this line, is foo(age) being called, or is it just being assigned to bar OR is it being called and THEN assigned to bar: var bar = foo(age);
4) Now for the most confusing: age is obviously an object reference as opposed to a literal in the example. Does that make a difference in regards to closures?
Note that I read a number of books, including JavaScript Programmer Reference and Object Oriented JavaScript and jQuery cookbook, which compare primitives vs reference types and how primitive types store directly in memory whereas reference tpyes reference memory, so if one reference changes, they all change where primitive remains ingrained. But when assigning a function as a reference like this, how does that affect the object "age" when passed into bar?
Code:
(function($) {
/*Validation Singleton*/
var Validation = function() {
var rules = {
email : {
check: function(value) {
if(value)
return testPattern(value,".+@.+..+");
return true;
}, .....
$.Validation = new Validation();
})(jQuery);
Code:
function foo(x) {
var tmp = 3;
return function (y) {
alert(x + y + tmp);
x.memb = x.memb ? x.memb + 1 : 1;
alert(x.memb);
}}
var age = new Number(2);
var bar = foo(age); // bar is now a closure referencing age.
bar(10);
View 3 Replies
View Related
Sep 20, 2006
I've spent several days trying to work this out. Maybe I'm just
searching for the wrong keywords/phrases.
I have some code that looks like:
[-- snippet starts --]
Console = new Object();
Console.init = function() {
this.STDIN = document.getElementById('console0_stdin');
this.STDOUT = document.getElementById('console0_stdout');
// set styles on the element references, eg:
this.STDIN.style.width = ï`%'
this.STDOUT.style.width = ï`%'
}
Console.focus = function() {
this.STDIN.focus();
}
Console.writeln = function(buffer) {
this.STDOUT.value += "
" + buffer;
}
[-- snippet ends --]
I'm not sure why, but the Console.focus() and Console.writeln() methods
just don't seem to be able to use the DOM references stored in
Console.STDIN and Console.STDOUT. Everything's fine in the
constructor, but other methods can't seem to use them.
View 8 Replies
View Related
Jan 29, 2009
Is it possible to test whether two objects are equal using the data they contain inside and not comparing their pointers with ==?
Well actually of course there is but...
Is there a way to do it without actually looping through the object, instead maybe something that came with JS? (something like a .equals() method from other programming languages.)
View 5 Replies
View Related
Jul 23, 2005
Sorry for the re-post but the original message subject no longer
applies. If I try this in IE5, it doesn't work:
<script type="text/javascript">
window.onload = foo;
</script>
<body>
whereas this does work:
<body onload="javascript:foo();">
This is not the way I want to handle events. I checked MSDN and it seems
to indicate that the first way should work. Is there something I can do
to get the first way (event handlers?) to work in IE5?
View 4 Replies
View Related
Jul 20, 2005
Can I use CSS to set onmouseover ?
In HTML I have a bunch of <A HREF="whatever"
onmouseover=eventhandler(this)">stuff</A>. I would prefer not to have the
onmouseover 'pollution'
Is it possible to specify the eventhandler using css ? i.e.
<A HREF="whatever" class="foo">stuff</A>.
View 3 Replies
View Related
Jul 23, 2005
I have a script in which a function launched by a START button
continuously calculates and writes a value to a text box. The
calculation is done in a for loop. In the loop is a conditional that is
a global variable, a boolean. If the boolean is true, break ends the
loop (or is supposed to!). A STOP button has an onclick function that
sets the global variable to true.
What happens, though, is that the function for the STOP button is
not executed until the for loop reaches the maximum value set for i.
Anyone know how you can get one button to stop a process started by
another?
View 4 Replies
View Related
Apr 18, 2006
Is it necessary to return a value from the event handlers? For
instance, what does the return value in the following code signify?
What will be its impact if it returned otherwise (true)?
<a href="http://www.w3schools.com"
onmouseover="alert('An onMouseOver event'); return true">
<img src="Click.gif" width="100" height="30">
</a>
View 9 Replies
View Related
Jun 1, 2006
Here is a little sample code:
<html>
<head>
<script type="text/javascript">
function BodyClick() {
// How to access the event object here?
alert(window.event.shiftKey);
}
function WindowLoad() {
document.body.onclick = BodyClick;
}
window.onload = WindowLoad;
</script>
</head>
<body></body>
</html>
It does not work in FireFox. How to make it work?
My only requirement is that I need to assign the BodyClick() handler
dynamically in script (not statically in HTML). So I cannot use this solution:
<body onclick="BodyClick(event)">
View 1 Replies
View Related
Feb 9, 2011
I've been teaching myself javascript and I'm a bit confused about the whole events business. I've been reading the Sitepoint book (among a bunch of others) and when it gets to Ch 4 things get down right confusing. They claim that inline event handlers are "so 1998", something I've heard before and then they proceed to write some pretty complex library files to get around the fact that IE <= 7 doesn't support much of the alternative ways of handling events--a familiar enough story. Anyhow, it seems that many many tutorials all over the internet (and countless pages) resort to inline event handlers as the standard. So, I'm confused. I obviously need to know inline event handlers if I intend to work as a web developer even though it's so 1998. Obviously inline even handlers are not quite on par with inline font attributes and transparent gif files despite the language one often hears. Can someone set me straight, and if possible suggest a brilliant tutorial, book chapter, or website that lays everything crystal clear for me?
View 14 Replies
View Related
Dec 2, 2005
I wanted to add a onclick event handler to an image in a loop cos I have a dynamic number of images. The problem is I also need to pass a parameter. This works in Opera 8, but doesn't work in IE:
document.images[i].onclick = "javscript: ShowDesc(" + i + ");";
What am I missing?
View 13 Replies
View Related
Jul 15, 2006
I've been reading this page on accessing event handlers and avoiding the inline ones. Suppose I want to hover over a link and make it display something else, I thought this is what I would put in the <head>:
<script type="text/javascript">
var x = document.getElementById('question');
x.onmouseover = function() {document.getElementById('answer').style.display='inline'}
x.onmouseout = function() {document.getElementById('answer').style.display='none'}
</script>
The HTML being:
<a id="question" href="#">Question</a>
<span id="answer" style="display:none;">The answer is 42</span>
I've reread the article in the link but to no avail, I don't know what is wrong.
View 4 Replies
View Related
Jul 23, 2005
Does Event handlers work in netscape.
<HTML><SCRIPT LANGUAGE="JScript">
function mouseclick() {
alert("I was clicked on " + window.event.srcElement.tagName);
}
</SCRIPT>
<BODY
<H1>Welcome!</H1>
<P>This is a very <B>short</B> document.
</BODY>
</HTML>
The above script works fine in IE But not in Netscape 7.2 :((
View 9 Replies
View Related
Jul 23, 2005
I have written a script that gets trigered by IE's toolbar button. In
this script I would like to asign an event handler to an element of the
document currently open in IE. The way one access the document object
from a toolbar button script is:
var doc = external.menuArguments.document;
Now assuming the document has an element called TextArea1, the logical
thing to do would be:
parentwin.document.all('TextArea1').onkeypress = new
Function('window.alert('asdf');');
Which goes compiles and runs, except the event handler does not get
triggered.
Another trick i tried is as follows:
var s = parentwin.document.createElement('script');
s.text = 'window.alert('asdf')'
s.htmlFor = 'TextArea1'
s.event = 'onclick'
parentwin.document.scripts[0] = s;
Same result.
View 1 Replies
View Related
Aug 9, 2005
I want to build a table that knows where it has been clicked. I found the
following solution myself. Are there better ones?
http://www.student.oulu.fi/~pkarjala/question1.html
(tested on Mozilla 1.7.8/Linux)
It sets the event handlers for each TD in the build() loop, including a
parameter in the function call that is different for each TD.
The whole thing is a simple example with a table with 5 by 5 cells. If you
click on a cell it's supposed to change color. Naturally, my question is
one more general terms. How to make big tables that associate various
event handlers with various cells, and where you will know exactly which
element triggered the event? How to make it simple and maintainable?
View 4 Replies
View Related
Sep 11, 2007
I am writing a javascript code that parses dom and finds event
handlers attached to mouseover events. Then i will replace the
existing handler say B() with my own function say A(). When the event
happen and control comes to my function A(), after doing required
processing i will call B() as shown below
<a href = "abc.com" mouseover = "B();"link </a>
while parsing i will have (trimmed down version)
var oldHandler = node.onmouseover;
node.
function A()
{
/ * my code */
oldHandler.call(this);
}
This was working fine as long as B() was a global function. I started
getting problems when B was a member function. For eg:
function Alerter(text)
{
this.text=text;
var me=this;
this.invoke=function ()
{
alert(this.text);
}
}
var sayHi = new Alerter('Hello, world!');
The web developer would have code like
<a href = "abc.com" mouseover = "sayHi.invoke()"link </a>
But this time around, my function A() fails since although i have
handler to sayHi.invoke(), it has to be executed in correct context.
Other wise "this.text" is giving me error because when i say
oldHandler.call(this), i am executing the sayHi.invoke() with the html
element being passed as this.
View 2 Replies
View Related
Jan 22, 2011
I want to create a HTML Table and correspondingly have 2 buttons. One would be add button and other would be remove button. I have few text boxes where I will fill the data and later on clicking Add these text boxes details would be added to the Table. I am using javascript code to handle the event (on click event handler) Similarly I wanted to delete an entry from the table. This is where I am having a problem. The requirement is: In the table if I click on any row I want that row to be highlighted. I can use any color to highlight the row. Then on clicking Remove Button I want to delete that row that is highlighted. I am unable to solve this as I dont know what event handler to use to perform this action and also how to code for this. I am not sure about the events the HTML table can handle and how the selected row can be deleted.
View 1 Replies
View Related
May 27, 2009
When I register an event handler directly into the HTML tag everything works fine, but I'm trying to register them from the external JS file where the function is, and that doesn't work at all. I've read that this is called the "traditional method" and that it should work.
I've tried it a million different ways, but what I'm putting below AFAIK is correct... but it just doesn't work. I've tried it in Firefox, IE, and Chrome - and used the "Inspect element" feature in Chrome, and am not getting any error messages.
Here is just a simple example of what I'm trying to do - its extremely basic, I know, but I just can't figure out why it won't work.
HTML:
JS:
(Again, it works perfectly when I stick the onclick="message()" event handler directly into the HTML h1 tag, but not when in the external file.)
View 4 Replies
View Related
Jun 2, 2010
I am trying to add onclick event handler to many objects but I can't understand why it doesn't work. To assign event handler I use traditional approach as described in [URL]Heres the code (extract.js):
Code JavaScript:
//the class
function extract(){
[code]....
I know that both select tags don't have options, but I generate them with JS because they hold sequential numbers and this part has no impact on the problem at hand.Both functions help select next or previous index in a given select tag for greater comfort
View 5 Replies
View Related
Mar 7, 2011
I'm trying to figure out a way to put this in all js code with the onclick event handlers and the parameters. I have 3 links that switch the style of my page. Right now I have them working with inline event handlers. Here are my code snippets below.
HTML:
<head>
<link rel="stylesheet" href="style1.css" type="text/css" title="style1"/>
{code}....
View 1 Replies
View Related
Aug 2, 2010
I'm trying to create links that onclick sort a table by title, author, etc. How would I pass an argument to an event handler? Right now, it just executes the sort function. It doesn't wait for me to click the link.
[Code]...
View 2 Replies
View Related
Jan 22, 2011
I am new to HTML and I am finding HTML and javascript extremely interesting. I have a problem at hand and I wanted to know how to solve it. I want to create a HTML Table and correspondingly have 2 buttons. One would be add button and other would be remove button. I have few text boxes where I will fill the data and later on clicking Add these text boxes details would be added to the Table. I am using javascript code to handle the event (on click event handler) Similarly I wanted to delete an entry from the table. This is where I am having a problem. The requirement is: In the table if I click on any row I want that row to be highlighted. I can use any color to highlight the row. Then on clicking Remove Button I want to delete that row that is highlighted. I am unable to solve this as I dont know what event handler to use to perform this action and also how to code for this. I am not sure about the events the HTML table can handle and how the selected row can be deleted.
View 1 Replies
View Related