Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как изменить действие функции (https://javascript.ru/forum/jquery/33686-kak-izmenit-dejjstvie-funkcii.html)

Dimaz 03.12.2012 16:06

Как изменить действие функции
 
Приветствую всех. Подскажите как можно изменить действие функции button(), вызываемой при нажатии кнопки "Далее". Она создает и выводит новые элементы input. Кнопка "Назад" ничего не создает, а только скрывает текущие элементы и показывает предыдущие. Мне нужно, чтобы кнопка "Далее" делала то же самое, что и "Назад", но при условии, что создаваемые элементы уже существуют. Как это можно реализовать?
var Data; var i = 0;
function button(x) {
if(x==1) {       //выполняется если нажата кнопка "Далее"
$('#here' + i).css("display", "none");
i++;
go();
$('#back').css("display", "inline-block");
}
else if(x==2){   //Выполняется если нажата кнопка "Назад"
$('#here' + i).css("display", "none");
i--;
$('#here' + i).css("display", "block");
}
}

function go(data) {
data = Data;
if(i > data.length - 1) {
return false;
}
var row = '';
row = '<span id="here'+i+'">';
row += '<b>' + data[i].questions + '</b><Br>';
var ss = data[i].answers.split(',');
for (var i2 = 0; i2<ss.length; i2++) {
row += '<input type="radio" name="id_answer'+i+'" value="' + i2 + '">' + ss[i2] + '<Br>';
}
row += '</span>'
$('#feeds').prepend(row);
}

$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
Data = data;
if(data) {
var fieldsCount = data.length;
var row = '';
if(fieldsCount) {
row = '<form><button onclick="button(1); return false;">Далее</button>';
row += '<button id="back" style="display: none" onclick="button(2); return false;">Назад</button></form>';
$('#feeds').html(row);
go(Data);
}
}
  }, "json"); 
return false;
});
});

Dimaz 03.12.2012 16:15

Когда возвращаешься к предыдущему вопросу, ранее выбранные варианты ответов сохраняются. Но проблема в том, что когда Нажимаешь "Далее", создается следующий вопрос с вариантами, даже если он уже был создан и просто скрыт. Т.е. выбранные варианты ответов теряются.

Dimaz 03.12.2012 17:26

Написал код с условием, где проверяется существует ли данный элемент на странице. Если существует, возвращается false, а если не существует, тогда создается.
function button(x) {
if(x==1) {
$('#here' + i).css("display", "none");
var z = $('#here' +i).length;    //пробуем найти этот элемент на странице
if(z) {      //если нашли возвращаем false
return false;
}
else {   //если не нашли, создаем новый
i++;
go();
$('#back').css("display", "inline-block");
}
}
else if(x==2){
$('#here' + i).css("display", "none");
i--;
$('#here' + i).css("display", "block");
}
}

Но опять проблема! Сразу же возвращается false, так как условие верное. При первом запуске скрипта еще до нажатия "Далее" создается первый элемент с id="here0"(т.е. выводится первый вопрос). А переменная i при первом запуске равна нулю, следовательно он находит этот элемент и возвращается false. Как сделать, чтобы он начинал проверять с того момента когда i больше нуля?


Часовой пояс GMT +3, время: 05:06.