Не удается найти нужные <div>с селектором после загрузки HTML - PullRequest
0 голосов
/ 09 мая 2009

Я надеюсь, что смогу найти решение для этого. Вот оно:

После отправки формы для добавления сообщения в базу данных я создаю <div> с помощью метода load. После этого я делаю некоторые вещи в функции обратного вызова.

Когда функция создания нового <div> завершена, она возвращается к вызывающей функции, которая должна предшествовать сообщению последнему вставленному <div>.

Вот тут и начинается проблема:

Я использую селектор, чтобы найти $(someDiv : last), но он неверно указывает <div>. Итак, я знаю, что это как-то связано с асинхронным процессом.

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

Если вы хотите увидеть живой пример Исходный код захламлен отладочным кодом в виде предупреждений, но вы можете увидеть, что он делает.

Ответы [ 3 ]

1 голос
/ 09 мая 2009

Ajax-вызовы являются асинхронными, вы должны использовать функцию обратного вызова для выбора загруженных данных, например:

$('div').load(url, data, function(data, status) {
   $(someDiv:last).dosomething();
} 
0 голосов
/ 09 мая 2009

Вы заметили, что в первый раз значение добавляется к первому элементу, а после этого оно добавляется к ранее последнему элементу? Это может быть ключом. О, и я застрял в цикле, который добавил мое сообщение 10 раз. Похоже, ваш код имеет проблемы с синхронизацией.

Редактировать: возвращение к основам выглядело бы примерно так: http://kruisit.nl/so/841982/ Надеюсь, это поможет.

0 голосов
/ 09 мая 2009

Вероятно, новый div не вставляется туда, где вы думаете. $ (someDiv: last) возвращает неправильный результат, потому что новый div отсутствует в someDiv или не находится в конце. Это похоже на то, что Firebug позволяет легко отлаживать.

Вместо того, чтобы использовать «последний» метакласс для выбора div, вот лучшая идея: дать новому div идентификатор и обращаться к нему напрямую. Или дайте ему класс при его создании, используйте класс, чтобы выбрать его $ (". Newdiv"), а затем очистите класс, когда вы закончите. Или просто верните новый div вызывающей функции, чтобы вообще не использовать селектор. Извините, я не совсем понял вашу ситуацию, но я думаю, что хотя бы одно из этих решений будет работать.

...