2010-11-21 3 views
3

Привет У меня есть форма, которая может содержать ряд элементов, добавленных через ajax. Но когда эта строка добавляется, новые входы не могут получать фокус.Как сказать JQuery о добавленной строке строки

При попытке решить эту проблему я обнаружил, что они получают фокус, если во время функции связывания активируется предупреждение.

Я искал ответы, но я просто не могу заставить его работать. Я думаю, что «живая» функция может быть связана, но я действительно не понимаю, как ее использовать.

вот мой код.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), dataType:"html", success:function (data, textStatus) {$("#saleitems").append(data);}, type:"get", url:"\/saleitems\/add\/" + $rows}); 
    $rows = $rows + 1; 
// alert("uncomment this to enable focus"); 
    $("#autoComplete_1").focus();  
    return false; 

}); 

Спасибо!

+0

Для получения информации о «живом» мероприятии, ознакомьтесь с API: http://api.jquery.com/live/. В принципе, он назначает слушателям элементы, соответствующие селектору сейчас или в будущем. –

ответ

2

Звучит как проблема с синхронизацией. $ .ajax - это асинхронный вызов. Когда вы забыли предупреждение, вызов функции .focus() происходит до того, как будет выполнен вызов ajax и до того, как функция успеха будет вызвана и добавлен новый вход. Когда вы добавляете предупреждение, это задерживает вызов .focus() достаточно долго, чтобы завершить вызов ajax.

Поместите .focus() (и, вероятно, $ строка приращения также) вызова в функции успеха, так что он работает только после вызова Ajax завершен:

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), dataType:"html", success:function (data, textStatus) { 
     $("#saleitems").append(data); 
     $rows = $rows + 1; 
     $("#autoComplete_1").focus();  
    }, type:"get", url:"\/saleitems\/add\/" + $rows}); 
    return false; 
}); 
+0

omg. это сработало. Спасибо, Эрв! – Will

1

Попробуйте дать фокус внутри обратного вызова функция. Поскольку вы используете AJAX, который является асинхронным по своей природе, вам придется подождать, пока данные не будут загружены.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), 
     dataType:"html", 
     success:function (data, textStatus) { 
      $("#saleitems").append(data); 

      $rows = $rows + 1; 
      $("#autoComplete_1").focus(); 
     }, 
     type:"get", 
     url:"\/saleitems\/add\/" + $rows 
    }); 

    return false; 

}); 
+0

Спасибо, что нашли время, этот & ответ выше достал меня за финишную черту! – Will

Смежные вопросы