To try the concept, I'm doing a very simple test.
I got a form with some text input showing up from the start. When I click on a field, I want to capture its Id, and add a value to the input text.
$(document).ready(function() {
$('input').focus(function() {
var currentId = $(this).attr('id');
$("#"+currentId).val('blah');
});
});
This works great with the initial fields, but it stops working with the fields added using ajax calls.
The trick is, users are able to click on any field and I don't know which until they click. My Ids looks like this:
experience0-CompanyName //(original one)
experience[n]-CompanyName
(the [n] part is also used to order the fields in the form as elements are grouped by experience, education skills etc...
how can I achieve this?
A simple change:
$(document).ready(function() {
$('input').live("focus", function() {
var currentId = $(this).attr('id');
$("#"+currentId).val('blah');
});
});
.focus
only binds to elements that exist at the time it's called. .live()
binds a function to an event for all existing elements, and any that are added to the DOM later.
The previous answers are no longer appropriate. They rely on jQuery.live, which is now deprecated. In jQuery 1.11, a call to jQuery.live produces an error. The current preferred solution is to use jQuery.on . The implementation of the jQuery.live code, above, would be as follows. The second parameter, currently set to ":input", can be replaced by a selector that conforms to your needs.
$( "body" ).on('focus', ":input", function() {
var currentId = $(this).attr('id');
$("#"+currentId).val('blah');
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With