JQuery :: Selector Does Not See Elements Created On-the-fly?
Mar 12, 2010
I have an element generator using jquery, However, elements generated were not affected by the event (click) even though they match tag and class name.
I would expect it to show "2" but instead it shows "0". Why?
It seems the find() method doesn't work on the newly created elements. Do traversing methods only work on elements that are actually in the document? If so, how can I traverse and manipulate freshly created elements prior to inserting them into the dom?
I create tablerows and cells dynimaic dependent on a ajax-request. Now i want to add droppable attribut to it with a plugin. I can manek the plugin work if i use static HTML, but my dynimic created elements seems to not be able to edit.All elements get class="drop" and even the easy code like $(".drop").hide(); does not effect my dynamic elements.[code]
I'm using a plugin (asmSelect) that dynamically generates list items as the user chooses options from a select. I want to add additional dynamic content to each of the list items as they are created. How is this best accomplished? I thought I could delegate a 'load' event for the list items, but it looks like load events don't fire for content that's generated by JavaScript. (Delegating a 'click' event works, so I know I've got the code correct.)
What I want to do is basically equivalent to: $('#testform').delegate('.asmListItem', 'load', function(){ custom_content = '<span>' + [calculated result] + '</span>'; $(this).append(custom_content); });
Modifying the plugin to take the dynamic content doesn't seem like an option. The additional content will be different every time, so I can't just pass it as an argument when I initialize the plugin.
I can see the raw HTML in firebug etc, but the dynamic elements (the ones created by jquery for example), obviously don't appear there. I struggle referencing some of them - Ideally I'd like to be able to trigger a display showing what handle to use for any given element - for example by clicking on them.
while creating this i am attaching the change event using live() function. On changing the above option i am recreating the above dropdown again. This dropdown in under a div .For eg:it has an id=1. During the time of recreating the above dropdown,i am dettaching the event handlers using die() and after that i remove the div with id=1.Again i will create a div with id=1 and a dropdown.
The problem now is that when i try to change the option two change events are triggered.I think the die() method haven't worked. Is it because i have created the dropdown under the div with same id?
Previously when developing my own modal windows I have been creating a "mask" div directly in my markup, in the CSS setting it to be display:none and then setting it to show() by jQuery when a button is clicked.
I'm sure there is a better way to do this but i'm getting a little stuck.
I tried adding the "mask" div and its content to the body using prepend() when my button is clicked but i found i then can't select any of the added elements in jQuery.
How can you select elements you have added to a page by jQuery?? Also if this is the right approach whats the best way to insert a block of html to a page??
I am learning jQuery now and have a big interest in this javascript framework. I am trying to bind an event to more than one element. I won't meet any problem if using selector. But now, I've created a function which I will pass the element. And I need within this function, to bind the code. This is my current code :
function updateDay(dayObj, monthObj, yearObj){ //I want to bind both monthObj and yearObj. yearObj.change(function(){ //do something }); monthObj.change(function(){yearObj.change()}); } $(document).ready(function(){ updateDay( $("#day"), $("#month"), $("#year")); });
As you can see, I must bind twice, once for yearObj, the other for monthObj. Is there anyway to bind the change() event only once? If there are some logic mistake in using function or such as feel free to point out, since I still haven't read all the documentation yet.
Let's say $pages is a collection containing all div elements that have an id of page1 or page2. From this, I wish now to select now only the page div (i.e page1 or page2) that contains a descendant with a class of 'A'. Tried lots of things, just can't get the format right.
I have a form that has a table that adds rows dynamically, 4 columns with each having a form element. i end up with the following when the page loads, created dynamically:
I've been fiddling around with a bit of javascript in a chrome extension - something to alter the Google buzz webpage.I'm trying to find each individual post basically and have the following:
var entry =$('.X0POSb'); //This main block contains the bulk of Google buzz content console.log(entry); var items = entry.find('.G3.G2');
So I have a table with rows and basically I cloned it and then appended it underneath another table. The user can click on the plus button to clone the table (which on the UI looks just like a row of fields) over and over. Next to the plus button I have a minus button that I want to use to remove the cloned table. Here's my code for the add table button:
Basically what I need to do is write functionality for the remove button that when clicked removes the bottom most table. Is there functionality in jquery where you can say "find last occurrence of 'addrow' and remove it onclick"? [code]...
I use the following code to add a "click" behaviour to an element:
$(document).ready(function(){ $("#element_id").click (function(){ ...... do something ....
[Code]....
Part of the node I clone is the element from the first piece of code I quoted. The addRowJob function also changed the ID of every element in the node I cloned. This way all IDs remain unique. Lets say the element in question has the ID "#element_id". Now I clone the node (which includes the element) and the cloned element gets its ID changed to "#element_id_new".
Of course I now want this newly append element ("#element_id_new") to have a click event attached to, but even if extend my $(document).ready(function() to:
$(document).ready(function(){ $("#element_id").click (function(){ ...... do something .... });
[Code].....
I simply doesn't work for the appended element.
My guess is that the $(document).ready(function(){ only fires when the document is finished loading. At this stage there is no element with the ID "#element_id_new" and therefore the click event can't be attached to the element. Makes senses...
But how do I get this click event attached to the newly appended element with the ID "#element_id_new"?
... but that doesn't work. It seems as though if the first selector returns no elements that the 2nd line is not executed. I might be wrong about the diagnosis, but the symptom is that I can show the log, but can't then hide it, whereas if I start with all the panels visible and remove the first selector, the hideLog event is triggered as expected.What does work is this:
In the examples for live() and delegate(), the selectors match at least one element that already exists. Will either of these commands work on elements for which there is no match at all on page load?
In my case, I want to bind a keyup event to the textareas that jeditable creates. I could probably create custom plug-in (to the plug-in :) to do the job, but I'd like to use live or delegate if they would work.
I'm trying to load some html content into a page via the ajax .load() method (wrapped within the $(document).ready() function).After I execute this, I'd like to bind all new span elements from the loaded content to a context menu plugin like this:
$("#selector").contextMenu({ menu: ''myMenu'' },
[code]....
Unfortunately since the span elements are coming from the ajax request,I don't think I can bind a normal event handler as per the plugin. [URL] how to use event bubbling in this situation.
I have been having issues with the .html(), .append() and .prepend() functions. If I attempt the following [code] jQuery doesn't seem to register the click. Is this a known bug? Is there a way around this?
I'm trying to set up an ajax app at work, but the IE6 won't display DOM objects my script is producing. Why won't the following code display in IE6 but works great in Firefox (several versions). Click the button and a Text node (Hello) and an input should appear. :mad: What's going on in IE?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <script language="JavaScript"> function createTD() { alert("createTD"); var myTR = document.createElement("tr"); var myFirstTD = document.createElement("td"); var myInput = document.createElement("input"); var left = document.getElementById("left"); var text = document.createTextNode("Hello"); myFirstTD.appendChild(myInput); myTR.appendChild(myFirstTD); left.appendChild(myTR);
I'm trying to write a script for a website that reads from a database and makes a separate table for each entry in the database. Since the number of entries can change, I want to dynamically create a div for each one, which I can later hide or display based on user selection. However, when I try to access the dynamically created elements by their ID, they return null. Is what I'm trying to do here actually possible?
for(var i = 0; i < tables.length; i ++) { var newDiv = document.createElement("div"); newDiv.setAttribute("id", tables[i].name); newDiv.setAttribute("name", tables[i].name); newDiv.setAttribute("class", "hidden");
I am creating textboxes dynamically using the following code:
[Code]...
I want to have a function that will remove textboxes and the newline that is created. I have the following function to remove the text boxes but I cant remove the new lines that were created so an empty space is left on the page.function RemoveElement() {
var d = document.getElementById('spanManualInput'); var oldbox = document.getElementById('Value'+i); d.removeChild(oldbox); d.removeChild('br'); }
I'm created a set amount of dynamic elements based on some elements in another form to try to submit them when the current form is submitted and this just doesnt work. It creates all the elements succesfully and puts in their proper names and values, but on the next page they are not available in $_POST in php.Here's the exact javascript I'm using, I tried appendChild and innerHTML,
Code: var elem = document.getElementById('submission_options').elements; for(var k = 0; k < elem.length; k++) {[code].....
Question: I need a few good idea on the best way to save a webpage (even better a node of a webpage) in which a user has created new elements. (via javascript?)
Concept: User creates elements on a canvas (via Javascript) then has the option to save the layout of those elements. upon pushing save the Javascript packages the created and/or changed elements and sends then to the server to be processed by PHP and saved.
Hurdles: saved data must include style attibutes, text, child nodes and so on. The when other users view the page PHP will build the elements from the original user saved file.
What I have Done:I have managed to use Xmlserializer to output the "canvas" element in firefox and safri I have used .outputHTML in IE to complish the same thing.Of course there are a few differences when comparing the two strings, mainly having to do with commas.IE does not surround id's in commas and FF does. This has me thinking there has to be a better way more consistant way. on other ways to save dynamic elements using Javascript, and PHP.