Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему скрипт не работает корректно?

Миша Кириченко Профи (856), закрыт 5 лет назад
Задача: после клика на get avg текст должен заполняться avg сформированного рандомом и внутри тэга sup текст должен замениться на 'get student name', а при повторном клике нужно возвращать исходное состояние. Проблема заключается в том, что после второго клика скрипт перестаёт реагировать на признак чётности-нечётности клика. Когда убираю условия if-else и вывожу click_counter каждого sup-а выводится всё правильно.

$(function () {
for (var student_index = 0; student_index < $('p').length; student_index++)
{
var avg=Math.floor(Math.random() * 100) + 10;
var _get=$('p > sup');
_get.eq(student_index).data("click_counter", 0);
//$('p').eq(student_index).data('avg',avg);
$('p').eq(student_index).data({'avg': avg, 'default_html': $('p').eq(student_index).html()});
}

_get.click(function()
{
$(this).data('click_counter',$(this).data('click_counter')+1);
//console.log($(this).data('click_counter'));
if ($(this).data('click_counter')%2==1)
{
$(this).siblings('span').html(""+"avg: "+$(this).parents('p').data("avg")+"");
$(this).text("get student name");
}
else
{
$(this).parents('p').html($(this).parents('p').data('default_html'));
//console.log($(this).parents('p').data('default_html'));
}

// $(this).siblings('span').html(""+"avg: "+$(this).parents('p').data("avg")+"");
// $(this).text("get student name");

});

})
Дополнен 5 лет назад
Лучший ответ
Ярослав Искусственный Интеллект (107837) 5 лет назад
Закинь код вместе с разметкой на jsbin/jsfiddle/codepen... не совсем понятна логика задачи.
Миша КириченкоПрофи (856) 5 лет назад
https://jsfiddle.net/52Lqvk10/ вот для удобства отдельно распределил всё
Ярослав Искусственный Интеллект (107837) https://jsbin.com/latidejeza/edit?js,output
Остальные ответы
Андрей Гуру (3032) 5 лет назад
не совсем понял, что тебе нужно, но у тебя написано....

то что ты хочешь (как я понял),
_get.click(function() с всем телом заменяй на

$('#wrapper').on('click', 'p > sup', function()
{
let $this = $(this);
$this.toggleClass('active');
if ($this.hasClass('active')) {
$this.prev().html(""+"avg: "+$(this).parents('p').data("avg")+"");
$this.text("get student name");
} else {
$this.parent('p').html($this.parent('p').data('default_html'))
}

});

или https://jsfiddle.net/6nx3j8gs/

P.S. тоже костыльно, цикл твой тоже бы покоцать....
АндрейГуру (3032) 5 лет назад
код выше рабочий... твою задачу делает
Похожие вопросы