#jquery #ajax
#jquery #ajax
Вопрос:
у меня такая ситуация внутри xxx.php
:
<form id="s">
<input id="q"/>
<input type="submit" href="Search!"/>
</form>
<div id="r"></div>
внутри у foo.php
меня есть другая форма:
<form id="ss">
<input id="qq"/>
<input type="submit" href="Search!"/>
</form>
<div id="rr"></div>
и внутри у yyy.php
меня есть другая форма:
<form id="sss">
<input id="qqq"/>
<input type="submit" href="Search!"/>
</form>
<div id="rrr"></div>
внутри javascript.js
у меня есть :
$('#s').submit(function(evt) {
evt.preventDefault();
$.ajax({
url: 'foo.php',
data: {
query: $('#q').val()
},
success: function(data) {
$('#r').html(data);
}
});
return false;
});
$('#ss').submit(function(evt) {
evt.preventDefault();
$.ajax({
url: 'yyy.php',
data: {
query: $('#qq').val()
},
success: function(data) {
$('#rr').html(data);
}
});
return false;
});
что происходит, так это то, что когда я отправляю первую форму, загружается вторая, так что теперь у меня есть 2 формы (как и ожидалось), но когда я отправляю вторую форму, третья не загружается с помощью ajax, но перенаправляется на нее путем обновления.
итак, в основном мне нужно выполнить как можно больше загрузок ajax
есть идеи?
Спасибо
Комментарии:
1. Вероятно, это не проблема, но почему у вас есть HREFS во входных данных ОТПРАВКИ? Мне кажется, вместо этого у вас должны быть значения.
2. вы обработали $(‘#sss’).submit(function(evt) {});
Ответ №1:
Вы должны использовать .live
, потому что вы добавляете данные динамически
$('#ss').live('submit', function(evt) {
evt.preventDefault();
$.ajax({
url: 'yyy.php',
data: {
query: $('#qq').val()
},
success: function(data) {
$('#rr').html(data);
}
});
return false;
});
Ответ №2:
Вам нужно использовать текущие события для вещей, которые вы динамически загружаете в so в вашем случае:
$("#ss").live('submit', function (e) {
// Code here
});
Вам нужно использовать текущие события только для вещей, которые не всегда есть в DOM. Если вы запрашиваете страницы через ajax, а затем намереваетесь их использовать, вам нужно будет использовать live events.
Смотрите : http://api.jquery.com/live / Для получения более подробной информации
Комментарии:
1. @HenryGarle вам не нужно — вы можете просто вручную привязать события к новым элементам после их загрузки.
2. ибп, он начал работать, похоже, что первый ajax должен оставаться таким, как я его настроил
3. Вы правы, Алнитак, вы могли бы поместить все привязки в функцию, которую вы можете запускать при загрузке страницы, но с этим связаны некоторые проблемы. Если у вас есть привязки для объектов, которые появляются несколько раз на странице и загружаются в разное время, вы можете получить несколько привязок. Текущие события при чрезмерном использовании могут вызвать проблемы с производительностью, но вот простой пример того, что может произойти, если вы не будете предельно осторожны при выполнении собственных событий привязки. jsfiddle.net/a8S8T
Ответ №3:
попробуйте обработать недавно загруженную форму $('#sss').submit(function(evt) {});