Основная ошибка здесь заключается в том, что атрибут name
элемента input
отличается от атрибута id
.Либо
<input name="username" type="text" size="16" onkeyup="lookup(this.value);" onblur="fill();"/>
должно быть
<input id="username" name="username" type="text" size="16" onkeyup="lookup(this.value);" onblur="fill();"/>
, либо селектор jQuery, ссылающийся на него, должен быть $("input[name='username']")
.
Другая возможная ошибка - и это действительно зависит от того, каквы объявляете javascript - может ли загруженный AJAX HTML-код получить доступ к функции fill
.Один из простых способов исправить это, хотя вы можете несколько потерять в производительности, если загружаете большое количество элементов списка, - это назначить обработчик событий в функции обратного вызова:
$.post("php/rpc.php", {queryString: username}, function(data){
if(data.length >0) {
$('#suggestions').show();
$('#autoSuggestionsList').html(data)
// find list elements and attach the event handler
.find('li').click(function() {
// this removes the need to pass in any arguments:
// just use the text of the list element
var val = $(this).text();
$('#username').val(val);
// as @SLaks notes, better a function than a string here
setTimeout(function() {
$('#suggestions').hide();
}, 200);
});
}
});
Это удаляеттребуется две функции и упрощает загрузку HTML с помощью AJAX, поскольку вы можете просто загрузить
<li>user1</li>
<li>user2</li>
См. http://jsfiddle.net/nrabinowitz/WNJnc/3/ для полного рабочего примера этого кода.