This question was answered for the live() method, but the live() method has been deprecated as of jQuery 1.7 and replaced with the .on() method and this answer does not work
If I understood correctly, your problem looks very similar to one I saw in another topic. I'll adapt my answer to your case, let's see if it solves your problem:
$(document).on("focus",[selector],function(e) {
if ( !$(this).data("autocomplete") ) { // If the autocomplete wasn't called yet:
$(this).autocomplete({ // call it
source:['abc','ade','afg'] // passing some parameters
});
}
});
Working example at jsFiddle. I used focus
instead of keydown
because I need to re-trigger the event, and I don't know how to do it with key/mouse events.
Update: You could also consider using clone, if your additional inputs will have the same autocomplete as an existing one:
var count = 0;
$(cloneButton).click(function() {
var newid = "cloned_" + (count++); // Generates a unique id
var clone = $(source) // the input with autocomplete your want to clone
.clone()
.attr("id",newid) // Must give a new id with clone
.val("") // Clear the value (optional)
.appendTo(target);
});
See the updated fiddle. There are also jQuery template plugins that might make this solution easier (although I haven't used one myself yet, so I can't talk from experience).
This seems just to be some peculiarity of the interaction between .on() and autocomplete. If you want to do this:
$(function(){
$('.search').live('keyup.autocomplete', function(){
$(this).autocomplete({
source : 'url.php'
});
});
});
This works with on():
$(function(){
$(document).on("keydown.autocomplete",".search",function(e){
$(this).autocomplete({
source : 'url.php'
});
});
});
You can access the event.target.id of the element that the autocomplete was called on with the parameter of the on() callback function (e in the code above).
The difference is with on(), the event param in the internal events works differently, holding different values. With live(), the event.target.id in the select function will hold the ID of the selected input element. But with on(), the event.target.id in select will hold the ID of the list of autocomplete items (ui-active-menuitem). With on(), you can access the ID of the input element with event.target.id from the change and open functions.