JQuery :: Use The Value Of The Variable When The Handler Was Set Instead Of Run?
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)?
I've many div with sequence of ids like d1 d2 d3 ... and I need to listen to their click event so I'm using a loop to add an event handler to them, Here it's my code:
for(var i = 0; i < $ds.length; i++){ var $d = $ds[i]; var xFunc = function(e){ document.title = "d: "+$d;
[Code]....
But when I click on each of them always the title goes to "d: 4" where 4 is the last value in $ds.
I'm creating a drop down menu so that when a user clicks on the drop down arrow and then hovers over one of the options, a bubble comes up and does a validation. The thing is that everything works fine in Firefox, but not in IE or Chrome. The problem is that the .mouseover() function doesn't work on the <option> tags in IE and Chrome, but it works fine in Firefox because apparently FF is the only browser that supports it.
I am having trouble figuring out how to correct this error, i think i have narrowed it down to what function is causing the issue, since once i comment it out, it doent give the error, but the code no longer does what its supposted to. Whats weird is that the code works how it should even with the error, but i dont want any errors even if they arnet effecting anything... well here is the code:
I'm trying to bind an event handler to a button in a page loaded via Ajax. This procedure should apply to every page I have to load via Ajax. I have tried two things: first, I declared the 'click' event handler for the button like this, and just did my ajax request. Here's the code:
$("#close_button").click(function(){ alert("This should popup"); }); $.ajax({ url: 'js/ajax/text.html',
I've got a problem when I append a row to the table, the link in new <td> in probably not in jQuery Collection and I cant use jquery click or any action on it, just href go to url.
Maybe it will be more clear on my code :)
$('table tr td a').each(function() { var $dialog = $('<div></div>').append($loading.clone()); var $link = $(this).one('click', function() { $dialog.load($link.attr('href')).dialog({ (...some code...)
[Code]....
Till now it works, but when I link on this link in the new row it just open href in browser instead of openin dialog.
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?!
I'm trying to change a word in an animated collapsible div script from Dynamic Drive. When clicking "Hide" I want the word to change to "Show". I have part of the script, but it's not working correctly - it just removes "Hide" when clicking on it. See the example here.
The code so far is this:animatedcollapse.ontoggle=function($, divobj, state){ //fires each time a DIV is expanded/contracted //$: Access to jQuery //divobj: DOM reference to DIV being expanded/ collapsed. Use "divobj.id" to get its ID //state: "block" or "none", depending on state if ($('#'+divobj.id+'-toggle').length==1){ //if toggle link has id 'divid-toggle' defined if (state=="block") $('#'+divobj.id+'-toggle').prepend('<span class="prefix">Hide </span>') else $('#'+divobj.id+'-toggle').find('span.prefix').remove() }} I'm totally new to jQuery.
My plan is to create a JavaScript class, with some functions and variables, and one of the functions is called when a user clicks on a certain element. However, I need to find out the ID of the element that was clicked (in the example, that of the <p>) for further processing. It looks basically like the following:
[Code]...
The result was very crazy, because console.log(this) gave me the node as result, and console.log($(this)) did the same only as jQuery node, but trying to find out the attribute via jQuery gave undefined as result. I haven't checked if this.id would work (should probably), but I'd prefer to keep the whole script in jQuery, if possible. I suspect it may be an overusage of the 'this' keyword, but if so, what's the proper way to do it?
I'm having problems with applying focus() to an element inside a blur() event handler. I get different results in different browsers. Specifically, IE and Opera seem to work fine, Firefox doesn't seem to do anything, and Chrome and Safari only do half of the job. Basically, I have an <input> with a blur() event handler attached to it. The event handler contains the code to apply focus to that same input, effectively disallowing the user to remove focus from the input.
I have a requirement to handle dates by using three fields, a (year) text field and two (month and day) selects. I fill the selects using jQuery, which works beautifully. However, I have an onblur handler for the year field that handles filling the month select and an onblur handler for the month select that handles filling the day select. Part of this is to get the right number of days for a month (and for leap years), but part of it is also to force users to enter the data in order so that I can process it correctly.
However, I check in both the onblur handler of the year text box and the onblur handler of the month select whether or not the year value is entered (since if it isn't, there's no point in continuing to the day field). If there is no year value, I call
$year.focus();
and exit the handler.
Unfortunately, the focus when all this returns is still on the month select. Adding "event.preventDefault()" and "event.stopPropogation()" within the handler have no effect.
I have a feeling that there's something very subtle going on that I'm missing. Among the points I have realized is that calling $year.focus() in the year onblur handler may activate the month onblur handler (since the month is the next input, I assume it gets focus when the year is blurred). This should not have any effect, since both handlers check for the year value just in case - but I wanted to note it in passing.
i'm looking for the best way to use global properties that defined at class level insid event handler functions.
for example : function MyClass() { this.v1 = "hello"; this.v2 = {name: 'joe', age:'30'}; this.link1 = $("<a/>", {id: "link1"});
[Code].....
actually, in link1Handler 'this' returns to link1 not to main class. so how to get class properties or functions inside the private functions of the same class?
I haven't come across an exampe that would enable me to pass data to my event handler.For example, if I click a button I want it to pass the value of an adjacent text input to my handler.
I am using jQuery 1.5.1 and am seeing a problem when testing in IE7 - all other browsers are fine.I am loading a number of scripts, and the last two load in the reverse order in which their respective script tags are listed, presumably because the last one is considerably smaller than the one previous. The problem is, instead of waiting for ALL scripts to load, jQuery begins processing the ready handlers before the final script loads. Subsequently, my handlers attempt to access objects that aren't defined, yet.Is this a known problem that is fixed in later jQuery versions, and is there some way I can work around this to ensure the ready handlers actually wait until ALL the scripts are loaded?
I've a very simple code where i am setting the font-size to currect font-size + 2 for a paragraph. Its set first time but when next time event handler is called it gets the same old value.code is ...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>
I have a <div> containing 3 buttons. The buttons have id's like this: Button 1: btnFoo Button 2: btnBar Button 3: btnBaz
I'd like to add an click event to each button to call a function named [button ID]_click(): i.e. btnFoo_click() btnBar_click() btnBaz_click()
So far I have this: $("#divButtons button").each(function() {. $( this ).bind("click",function(){ eval(($(this)[0].id) + '_click()'); }); }); This works but is there a way without having to use eval and still utilizing the lovely .each function?
I need to know how to add an event to a button. The specific issue is that I want to add an event which is a prototype function of a class. Consider the following as an example:
i've a problem using the change-handler in a simple html-formular. the change-handler fires twice when the input-field already defines an onChange-Event.
Example: in head of html: <script src="jquery-1.4.2.js" language="javascript"></script> <script type="text/javascript"> $(document).ready(function() { $("#abc").change(function(event){event.srcElement.style.borderColor='red'; });});
In the below code snippet I'm trying to add an dynamic event in <div id="button3"> when you click at button1, which is added static in the html body. button3 has exactly the same behaviour as button1, but the eventhandler will not be activated.
I am have an MVC app that generates a list of rows, of which one of the columns is a button. Here is the rendered HTML for the buttons: <input id ="btnUpdate21" type ="submit" value ="Approve" synchId ="21" /> <input id ="btnUpdate22" type ="submit" value ="Approve" synchId ="22" /> .....
Following is my selector that I use to bind the buttons to my click event: <script type ="text/javascript" charset ="utf-8" > $(document).ready(function () { $('input[id^="btnUpdate"]' ).click(promptForSynchDate); });
I have been trying to access the button Id, though what I really need is the attribute synchId, to use inside of a modal. I have so far been unable to access either one of them. My modal works fine. But the value of either attribute is always "undefined".
Here is my click event handler: (I stuck the alert in there just for debug purposes) function promptForSynchDate() { $(document).ready( function () { var test1 = $(this).attr('id'); alert( 'test1 is : ' + test1); $( '#approve-synch').dialog({ .....