#jquery #ajax #select
#jquery #ajax #выберите
Вопрос:
У меня есть следующая форма, в которой есть 2 выбора:
<form id="form" class="form_visitar" method="post" action="ajax/selects.php">
<select name="select-local" class="select-index">
<option value="">'.$select_visitar_tipo.'</option>
<option value="1">'.$select_visitar_rest.'</option>
<option value="2">'.$select_visitar_bar.'</option>
<option value="3">'.$select_visitar_cafe.'</option>
</select>
<select name="select-precio" class="select-index">
<option value="">'.$select_visitar_precio.'</option>
<option value="1">'.$select_visitar_p1.'</option>
<option value="2">'.$select_visitar_p2.'</option>
<option value="3">'.$select_visitar_p3.'</option>
</select>
</form>
Чего я хочу, так это: после того, как я выберу что-то из выпадающих списков (сразу после нажатия на них у меня нет кнопки отправки) Я хочу получить значение для выполнения запроса через ajax. Я очень новичок в использовании функции ajax и чувствую, что могу получить ее не так часто, как хотелось бы. Пока это моя ajax-функция (selects.php прямо сейчас это просто сообщение, которое будет отображаться в div для тестирования):
<script type="text/javascript">
$(".form_visitar").click(function() {
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: $(this).serialize(),
success: function(data) {
$("#result").html(data);
}
})
return false;
});
</script>
Комментарии:
1. Вы привязываете клик к форме, что не имеет особого смысла, у вас должна быть кнопка или ссылка для отправки.
Ответ №1:
Вам нужно привязаться к change
событию в элементах select, а не к click
событию в форме.
$(".select-local, .select-precio").change(function() {
$.ajax({
type: "POST",
url: $(".form_visitar").attr("action"),
data: $(".form_visitar").serialize(),
success: function(data) {
$("#result").html(data);
}
});
});
Это привяжет change
обработчик к select
элементам с именами классов select-local
и select-precio
. Если вы хотите просто настроить таргетинг на определенный select, просто измените селектор:
$(".select-precio").change(function() {
...
});
Если вы отправляете только значение select, то вам, вероятно, не нужно сериализовать всю форму. Вы могли бы сделать что-то вроде этого:
$(".select-local, .select-precio").change(function() {
var value = $(this).val();
$.ajax({
type: "POST",
url: $(".form_visitar").attr("action"),
data: "value=" value,
success: function(data) {
$("#result").html(data);
}
});
});
Комментарии:
1. Я не смог заставить его работать сегодня, я попробую снова завтра. Должно ли это быть внутри $ (document). готово (функция(){})? Или в конце документа?
2. ДА. Правильным решением было бы поместить его в обработчик document ready.
3. Ну, кажется, это не работает. Может быть, у меня конфликт между этим и jqTransform, который изменяет внешний вид выбранных?
4. Что ж, похоже, в этом и заключалась проблема. Для тех, кто может в конечном итоге искать здесь, это может быть решением: code-pal.com /…
Ответ №2:
использовать
<script type="text/javascript">
$(".select-precio").change(function() {
var form = $("#form");
$.ajax({
type: "POST",
url: form.attr('action'),
data: form.serialize(),
success: function(data) {
$("#result").html(data);
}
})
return false;
});
</script>
Комментарии:
1. Это не сработает.
this
в анонимной функции ссылается на select, а не на форму.2. я ответил слишком быстро и не обратил внимания на функцию $.ajax. Я отредактировал соответствующим образом