AJAX.Выполнение нескольких действий
1.
Александр (01.12.2011 / 00:42)
Всем доброй ночи!Есть такой скрипт, который добавляет допустим какой либо Товар в корзину , без обновления страницы (пример
1 ,
2).Но проблема в том что он добавляет только один товар, который самый первый, остальные кнопки не работают, а надо чтобы была возможность добавить все товары.Ajax я только изучаю, весь вечер вожусь, не могу разобраться.Пробывал использовать циклы в ajax, не помогает, видимо не так делал.Вот собственно сам код:
...
<script src="jquery-1.2.3.pack.js"></script>
<script type="text/javascript">
$(function() {
var id = $("input#id").val();
$(".button_"+id+"").click(function() {
var dataString = 'id='+ id;
$.ajax({
type: "POST",
url: "data.php",
data: dataString,
success: function() {
$('#test_form_'+id+'').html("<div id='message'></div>");
$('#message').html("Товар №"+id+" добавлен")
.hide()
.fadeIn(1200, function() {
}); }
});
return false;
});
});
</script>
</head><body>
<?php
$i=0;
while ($i++<5)
{
echo '<div id="test_form_'.$i.'"><form name="contact" action="">Товар № '.$i.'
<input type="hidden" name="id" id="id" value="'.$i.'" class="text-input" />
<input type="submit" name="submit" class="button_'.$i.'" id="submit_btn" value="В корзину" /></form></div><br/>';
}
?>
...
Подскажите пожалуйста как правильно сделать?
2.
Дмитрий (01.12.2011 / 05:20)
Вместо
var id = $("input#id").val();
$(".button_"+id+"").click(function() {
попробуй
function click_button(id) {
тогда кнопки будут такие
<input type="submit" name="submit" class="button_' . $i . '" onclick="click_button(' . $i . ')" id="submit_btn" value="В корзину" />
Короче, алгоритм такой. Вообще убери поле hidden, создай ф-ю click_button(), передавай в нее ID товара, и на onclick кнопки повесь эту ф-ю.
3.
Александр (01.12.2011 / 08:23)
2.
dima.london, спасибо за подсказку, но че то так работать не хочет...
4.
Дмитрий (01.12.2011 / 08:41)
3.
PR0Z0N, облегченный вариант
<script type="text/javascript">
function click_button(id) {
alert('Товар № ' + id);
};
</script>
<?php
$i=0;
while ($i++<5)
{
$repsone = 'Товар № ' . $i;
$repsone.= ' <input type="submit" onclick="click_button(' . $i . ')" value="В корзину" />';
echo '<p>' . $repsone . '</p>';
}
?>
5.
Дмитрий (01.12.2011 / 09:14)
Пример посложнее, с красотой и проверкой на вшивость.
<style>
.t_cont{
height:30px;
line-height:30px;
padding-left:10px;
border-bottom: 1px solid #222;
margin:0 0 5px 5px;
padding:0 0 5px 5px;
}
.t_name{
float: left;
width:100px;
height:30px;
line-height:30px;
margin-left:10px;
}
.t_submit{
float: left;
width:150px;
height:30px;
line-height:30px;
color:#fff;
background-color:green;
cursor:pointer;
font-weight:700;
text-align:center;
}
</style>
<script type="text/javascript">
function click_button(id) {
var rep = $('div#submit_' + id).text();
if (rep != 'Добавлено')
{
/* тут код добавления в корзину */
$('div#submit_' + id).css('backgroundColor', 'red');
$('div#submit_' + id).text('Добавлено');
alert('Товар № ' + id + ' успешно куплен');
} else {
alert('Мы не продаем один и тот же товар 2 раза');
}
};
</script>
<?php
$i=0;
while ($i++<5)
{
$repsone = '<div class="t_cont">';
$repsone.= '<div class="t_name">Товар № ' . $i . '</div>';
$repsone.= '<div class="t_submit" id="submit_' . $i . '" onclick="click_button(' . $i . ');">В корзину</div>';
$repsone.= '</div>';
echo $repsone;
}
?>
6.
Алексей (01.12.2011 / 10:19)
dima.london (1 Декабря 2011 / 09:14)
Пример посложнее, с красотой и проверкой на вшивость.
<style>
.t_cont{
height:30px;
line-height:30px;
padding-left:10px;
border-bottom: 1px solid #222;
margin:0 0 5px 5px;
padding:0 0 5px 5px;
}
.t_name{
float: left;
width:100px;
height:30px;
line-height:30px;
margin-left:10px;
}
.t_submit{
float: left;
width:150px;
height:30px;
line-height:30px;
color:#fff;
background-color:green;
cursor:pointer;
font-weight:700;
text-align:center;
}
</style>
<script type="text/javascript">
function click_button(id) {
var rep = $('div#submit_' + id).text();
if (rep != 'Добавлено')
{
/* тут код добавления в корзину */
$('div#submit_' + id).css('backgroundColor', 'red');
$('div#submit_' + id).text('Добавлено');
alert('Товар № ' + id + ' успешно куплен');
} else {
alert('Мы не продаем один и тот же товар 2 раза');
}
};
</script>
<?php
$i=0;
while ($i++<5)
{
$repsone = '<div class="t_cont">';
$repsone.= '<div class="t_name">Товар № ' . $i . '</div>';
$repsone.= '<div class="t_submit" id="submit_' . $i . '" onclick="click_button(' . $i . ');">В корзину</div>';
$repsone.= '</div>';
echo $repsone;
}
?>
Незря наверно люди придумали обработку событий
7.
Дмитрий (01.12.2011 / 12:31)
megabit (1 Декабря 2011 / 09:19)
Незря наверно люди придумали обработку событий
Читай внимательно первый пост. Какая была задача? Или мне надо было полностью скрипт ему написать? С обработкое repsone, парсингом и занесением в куки и БД? Ага.
Добавлено через 01:44 сек.
возьми и напиши, чо
8.
Алексей (01.12.2011 / 12:46)
7.
dima.london, ну ты все же что то написал
а проблема в том что id на странице один вот и добавлял только один товар
class="button_'.$i.'" id="submit_btn"
обрабатывалась только одна кнопка submit_btn и button_0
достаточно изменить так
id="button_'.$i.'" class="submit_btn"
$('.submit_btn').onclick(..);
9.
Дмитрий (01.12.2011 / 13:56)
8.
megabit, категорически не согласен.
Обрати внимание на начало JS. Я даже закомментирую:
$(function() {
// id - это содержимое поля input с id="id"
var id = $("input#id").val();
// при клике по блоку с class=".button_ID"......
$(".button_"+id+"").click(function() {
А теперь взглянем на html
<input type="hidden" name="id" id="id" value="'.$i.'" class="text-input" />
<input type="submit" name="submit" class="button_'.$i.'" id="submit_btn" value="В корзину" />
Алгоритм изначально неверный. Во всех полях name="id" одинаковый id="id", который и передает первое значение из цикла, а class="submit_btn" тут вообще не при чем, и я подрзреваю, что он просто задает стиль кнопки. В любом случае в JS всегда будет передаваться команда на срабатывание события для блока .button_1, не зависимо от того, по какому блоку был клик.
Блин, я Капитан Очевидность, кэп.
10.
Алексей (01.12.2011 / 13:58)
9.
dima.london, слишком много букв, да я даже толком не читал посты тут
согласен что подход изначальной не верный
11.
Александр (01.12.2011 / 15:46)
Понятно.Ладно, спасибо за помощь парни!
12.
ramzes (01.12.2011 / 16:15)
dima.london (1 Декабря 2011 / 13:56)
8. megabit, категорически не согласен.
Обрати внимание на начало JS. Я даже закомментирую:
$(function() {
// id - это содержимое поля input с id="id"
var id = $("input#id").val();
// при клике по блоку с class=".button_ID"......
$(".button_"+id+"").click(function() {
А теперь взглянем на html
<input type="hidden" name="id" id="id" value="'.$i.'" class="text-input" />
<input type="submit" name="submit" class="button_'.$i.'" id="submit_btn" value="В корзину" />
Алгоритм изначально неверный. Во всех полях name="id" одинаковый id="id", который и передает первое значение из цикла, а class="submit_btn" тут вообще не при чем, и я подрзреваю, что он просто задает стиль кнопки. В любом случае в JS всегда будет передаваться команда на срабатывание события для блока .button_1, не зависимо от того, по какому блоку был клик.
Блин, я Капитан Очевидность, кэп.
Если это в цикле то как минимум кривой хтмл будет и не рабочий js, будет реагировать всегда на первую позицию, не зависимо от того какую выбрали на самом деле
13.
Дмитрий (01.12.2011 / 16:22)
12.
ramzes, я в
5 посте набросал вполне работоспособный скрипт. Еще и кнопочки в css отрисовал.
14.
ramzes (01.12.2011 / 16:41)
13.
dima.london, можно проще, без явного вызова функции, мегабит прав
15.
ramzes (01.12.2011 / 22:20)
html
<button class="shop" name="'.$i.'" value="заказать" />
js
$(document).ready(function(){
$(".shop").click(function(){
var shopID = $(this).attr("name");
/* тут отправка и алерт, shopID - ид товара (переменная $i в цикле */
});
});
на скорую руку
URL:
https://visavi.net/topics/27003