[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Jquery голосование
web-monster
Вообщем такая идея но пока не до конца понимаю как её реализовать:

Есть 5 вариантов:

а +1+2+3+4+5
б +1+2+3+4+5
в +1+2+3+4+5
г +1+2+3+4+5
д +1+2+3+4+5

за каждый можно ставить от 1 до 5 баллов, всего получается 25 баллов максимум, нужно ограничить 10 баллами то есть 5 баллов за вариант а, 3 балла за г и если например захочу поставить за вариант д 4 балла он говорит, осталось всего 2 балла..

Подскажите как это можно сделать:)



Спустя 1 минута, 19 секунд (9.08.2010 - 13:03) Lenarfate написал(а):

Спустя 1 минута, 4 секунды (9.08.2010 - 13:04) web-monster написал(а):
эт я знаю, вот как именно сделать ограничение на максимум 10 баллов из 25, а после чего все 5 вариантов отправить

Спустя 44 минуты, 42 секунды (9.08.2010 - 13:48) Michael написал(а):
Ну так держи в переменной кол-во использованных баллов и по onchange меняй. Пробует нажать 5-ку - идет проверка - а сколько в наличии и т.д.

Спустя 3 часа, 29 секунд (9.08.2010 - 16:49) web-monster написал(а):
Вообщем сделал так, нормально или можно поумнее сделать?

var voteCount1 = Number(0);
var voteCount2 = Number(0);
var voteCount3 = Number(0);
var voteCount4 = Number(0);
var voteCount5 = Number(0);

function photoVote()
{
var id = $(this).attr('id').substr(4,1); // Получаем id звёзд из 5
var vote = $(this).attr('id').substr(6); // Балл

if(id==1) {
voteCount1 = Number(vote);
} else if(id==2) {
voteCount2 = Number(vote);
} else if(id==3) {
voteCount3 = Number(vote);
} else if(id==4) {
voteCount4 = Number(vote);
} else if(id==5) {
voteCount5 = Number(vote);
}


if(voteCount1+voteCount2+voteCount3+voteCount4+voteCount5<10) {
alert('До 10')
} else {
alert('Больше 10')
}


return false;
}

Спустя 8 минут, 46 секунд (9.08.2010 - 16:58) Michael написал(а):
html еще покажи

Спустя 17 минут, 14 секунд (9.08.2010 - 17:15) web-monster написал(а):
<ul>
<li><div
id="votesInfoCount"></div></li>
<li><span>
Вариант 1:</span> <a href="#" id="vote1_1" class="photo_vote">1</a><a href="#" id="vote1_2" class="photo_vote">2</a><a href="#" id="vote1_3" class="photo_vote">3</a><a href="#" id="vote1_4" class="photo_vote">4</a><a href="#" id="vote1_5" class="photo_vote">5</a></li>
<li><span>
Вариант 2:</span> <a href="#" id="vote2_1" class="photo_vote">1</a><a href="#" id="vote2_2" class="photo_vote">2</a><a href="#" id="vote2_3" class="photo_vote">3</a><a href="#" id="vote2_4" class="photo_vote">4</a><a href="#" id="vote2_5" class="photo_vote">5</a></li>
<li><span>
Вариант 3:</span> <a href="#" id="vote3_1" class="photo_vote">1</a><a href="#" id="vote3_2" class="photo_vote">2</a><a href="#" id="vote3_3" class="photo_vote">3</a><a href="#" id="vote3_4" class="photo_vote">4</a><a href="#" id="vote3_5" class="photo_vote">5</a></li>
<li><span>
Вариант 4:</span> <a href="#" id="vote4_1" class="photo_vote">1</a><a href="#" id="vote4_2" class="photo_vote">2</a><a href="#" id="vote4_3" class="photo_vote">3</a><a href="#" id="vote4_4" class="photo_vote">4</a><a href="#" id="vote4_5" class="photo_vote">5</a></li>
<li><span>
Вариант 5:</span> <a href="#" id="vote5_1" class="photo_vote">1</a><a href="#" id="vote5_2" class="photo_vote">2</a><a href="#" id="vote5_3" class="photo_vote">3</a><a href="#" id="vote5_4" class="photo_vote">4</a><a href="#" id="vote5_5" class="photo_vote">5</a></li>
</ul>

Спустя 15 минут, 41 секунда (9.08.2010 - 17:31) Michael написал(а):
у тебя идет сначала присваивание, а потом проверка. Если он перевибирает оценку в варианте и не ОК - надо же не изменять оценку.

И без этих id="vote3_2" можно легко обойтись - сейчас прикину как.

Спустя 9 минут, 43 секунды (9.08.2010 - 17:40) Michael написал(а):
вот без id в html-е определяем вопрос и вариант ответа:

        $this = $(this);
$li = $this.parent('li');
$ul = $li.parent('ul');
var vote = $li.children().index($this);
var id = $ul.children().index($li);
alert(id + '|' + vote);

Спустя 4 минуты, 46 секунд (9.08.2010 - 17:45) web-monster написал(а):
Классно. Я как-то и не использовал index, теперь надо иметь ввиду

Спустя 9 минут, 45 секунд (9.08.2010 - 17:55) Michael написал(а):
Также только у всех <a> без атрибута id
И еще - всем ссылкам указываешь один и тот же класс, хотя если тому же ul присвоить id="ulvote" можно для ссылок правило записать:
#ulvote a {
}
и обойтись без указания class="photo_vote" каждой ссылке.

Спустя 23 минуты, 2 секунды (9.08.2010 - 18:18) web-monster написал(а):
Да так явно короче:

<ul id="photo_votes">                                                                                                                                                                                            
<li><div
id="votesInfoCount"></div></li>
<li><span>
Вариант 1:</span> <a href="#">1</a><a href="#">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a></li>
<li><span>
Вариант 2:</span> <a href="#">1</a><a href="#">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a></li>
<li><span>
Вариант 3:</span> <a href="#">1</a><a href="#">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a></li>
<li><span>
Вариант 4:</span> <a href="#">1</a><a href="#">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a></li>
<li><span>
Вариант 5:</span> <a href="#">1</a><a href="#">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a></li>
</ul>



var voteCount1 = Number(0);
var voteCount2 = Number(0);
var voteCount3 = Number(0);
var voteCount4 = Number(0);
var voteCount5 = Number(0);

function photoVote()
{
$this = $(this);
$li = $this.parent('li');
$ul = $li.parent('ul');
var vote = $li.children().index($this);
var id = $ul.children().index($li);

if(id==1) {
voteCount1 = Number(vote);
} else if(id==2) {
voteCount2 = Number(vote);
} else if(id==3) {
voteCount3 = Number(vote);
} else if(id==4) {
voteCount4 = Number(vote);
} else if(id==5) {
voteCount5 = Number(vote);
}


if(voteCount1+voteCount2+voteCount3+voteCount4+voteCount5<10) {
alert(voteCount1+voteCount2+voteCount3+voteCount4+voteCount5)
} else {
alert(voteCount1+voteCount2+voteCount3+voteCount4+voteCount5)
}


return false;
}

$('#photo_votes > li > a').click(photoVote);

Спустя 5 часов, 18 минут, 21 секунда (9.08.2010 - 23:36) web-monster написал(а):
Столкнулся с такой проблемой, когда выбрал например за

Вариант 1 - 5 баллов
за Вариант 2 - 5 баллов потом срабатывает алерт что всё много уже, но если
в вариант 3 или 4 поставить оценки то они плюсуются к общему счётчику, как сделать чтобы когда достигался лимит 10 остальные не считались + можно было изменить в меньшую сторону уже выбранные варианты!

Спустя 1 час, 2 минуты, 44 секунды (10.08.2010 - 00:39) web-monster написал(а):
Вообщем вот это говно код работает как надо, теперь надо придумать как его сделать нормальным)

var voteCount1 = Number(0);
var voteCount2 = Number(0);
var voteCount3 = Number(0);
var voteCount4 = Number(0);
var voteCount5 = Number(0);
var voteCount6 = Number(0);


function photoVote()
{
$this = $(this);
$li = $this.parent('li');
$ul = $li.parent('ul');
var vote = $li.children().index($this)-1;
var id = $ul.children().index($li);

if(id==1) {
if(Number(vote)+voteCount2+voteCount3+voteCount4+voteCount5+voteCount6<=10) {
voteCount1 = Number(vote);
$this.parent().find('a').removeClass('photo_votes_active'); // Очищаем выделения на строке
$this.addClass('photo_votes_active'); // Добавляем выделение
}
}
else if(id==2) {
if(voteCount1+Number(vote)+voteCount3+voteCount4+voteCount5+voteCount6<=10) {
voteCount2 = Number(vote);
$this.parent().find('a').removeClass('photo_votes_active'); // Очищаем выделения на строке
$this.addClass('photo_votes_active'); // Добавляем выделение
}
}
else if(id==3) {
if(voteCount1+voteCount2+Number(vote)+voteCount4+voteCount5+voteCount6<=10) {
voteCount3 = Number(vote);
$this.parent().find('a').removeClass('photo_votes_active'); // Очищаем выделения на строке
$this.addClass('photo_votes_active'); // Добавляем выделение
}
}
else if(id==4) {
if(voteCount1+voteCount2+voteCount3+Number(vote)+voteCount5+voteCount6<=10) {
voteCount4 = Number(vote);
$this.parent().find('a').removeClass('photo_votes_active'); // Очищаем выделения на строке
$this.addClass('photo_votes_active'); // Добавляем выделение
}
}
else if(id==5) {
if(voteCount1+voteCount2+voteCount3+voteCount4+Number(vote)+voteCount6<=10) {
voteCount5 = Number(vote);
$this.parent().find('a').removeClass('photo_votes_active'); // Очищаем выделения на строке
$this.addClass('photo_votes_active'); // Добавляем выделение
}
}
else if(id==6) {
if(voteCount1+voteCount2+voteCount3+voteCount4+voteCount5+Number(vote)<=10) {
voteCount6 = Number(vote);
$this.parent().find('a').removeClass('photo_votes_active'); // Очищаем выделения на строке
$this.addClass('photo_votes_active'); // Добавляем выделение
}
}



var voteSumm = voteCount1+voteCount2+voteCount3+voteCount4+voteCount5+voteCount6;
if(voteSumm<=10)
{
$('#votesInfoCount').html(10-voteSumm+' баллов');
}
else
{
alert(voteCount1+voteCount2+voteCount3+voteCount4+voteCount5+voteCount6)
}


return false;
}

Спустя 7 часов, 9 минут, 23 секунды (10.08.2010 - 07:48) Michael написал(а):
Не надо писать говнокод.

Вот я накидал, как сделал бы сам (любое кол-во вариантов)(html твой):

#photo_votes a {
height:10px; width:10px; margin:10px;}
.choice {background-color: #CCFFCC;}



 var limit = 10;
$(document).ready(
function() {
var $lis = $('#photo_votes li:gt(0)'); // Строки выбора (без 1-ой т.к. там информационный div)
$lis.data('choice', 0); // ставим метку каждой строке - ничего не выбрано
$lis.find('a').click(function(){ // нажали по ссылке
$this = $(this); // <a>
$li = $this.parent('li');
var vote = $li.children().index($this); // текущий выбор
// проверяем сколько имеется в других вариантах

var have = 0;
$lis.each(function(){
if ($(this)[0] != $li[0]) have += $(this).data('choice');
});
var sum = have + vote;
if (sum > limit) alert('привысили лимит в ' + limit);
else { // устанавливаем новый выбор
$li.data('choice', vote);
$li.find('a').removeClass('choice');
$this.addClass('choice');
$('#votesInfoCount').text(sum);
}


return false;
});

}// ready
);

Спустя 2 часа, 40 минут, 36 секунд (10.08.2010 - 10:29) web-monster написал(а):
ок только первый вариант 1 получается, а нужно чтобы 0 был. Сейчас 6 ссылок:

0,1,2,3,4,5

И как потом отправить значения каждого, до этого так сделал:

		$.post('plugin/photo/photo_func.php?type=save_vote', 
{'save_vote':$.toJSON({"vote1" : voteCount1,"vote2" : voteCount2,"vote3" : voteCount3,"vote4" : voteCount4,"vote5" : voteCount5,"vote6" : voteCount6})},

function(data) {
if(data.status == 'ok') { $('#success_photo_votes').html(data.text).fadeIn(500, function () {$('#success_photo_votes').fadeTo(2500,0.9).fadeOut(500);}); }
if(data.status == 'error') {$('#errors_photo_votes').html(data.text).fadeIn(550, function () {$('#errors_photo_votes').fadeTo(2500,0.9).fadeOut(500); });}
}
);

return false;

Спустя 2 часа, 52 минуты, 16 секунд (10.08.2010 - 13:21) Michael написал(а):
Если с нуля, то значения считать:
var vote = $li.children().index($this) - 1;	// текущий выбор

А результат считывать:
    var $lis = $('#photo_votes li');
var voteCount1 = $lis.eq(1).data('choice');
var voteCount2 = $lis.eq(2).data('choice');
...

Спустя 2 часа, 9 минут, 23 секунды (10.08.2010 - 15:31) web-monster написал(а):
var voteCount1 = $lis.eq(1).data('choice'); почему-то 0 всегда и остальные значения

Спустя 11 минут, 32 секунды (10.08.2010 - 15:42) Michael написал(а):
html не менял и код мой используешь?

Спустя 3 минуты, 39 секунд (10.08.2010 - 15:46) Michael написал(а):
нулями будет если ты еще ничего не выбирал

Спустя 10 минут, 36 секунд (10.08.2010 - 15:56) web-monster написал(а):
Всё разобрался! Спасибо тебе! +1

Просто объявлял не в том месте по-этому и нули были. Сейчас всё классно!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.