Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает функция по кнопке (https://javascript.ru/forum/jquery/33641-ne-rabotaet-funkciya-po-knopke.html)

Dimaz 30.11.2012 17:58

Не работает функция по кнопке
 
Всем привет.:) Помогите разобраться, почему у меня не работает цикл в функции start:
function start(data) {
for (var i in data) {
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>';
}
break;
}
}

$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
if(data) {
var fieldsCount = data.length;
var row = '';
if(fieldsCount) {
row = '<form>';
start;
row += '<button onclick="return false; start;">Далее</button></form>';
$('#feeds').html(row);
}
}
  }, "json"); 
return false;
});
});

Функция start, прогоняющая цикл, вызывается при щелчке по элементу input:image. Но цикл не работает. Он использует полученные с сервера данные и потом работает с ними. Но как передать в вызываемую функцию эти данные? Вроде же указал: function start(data).
Мне нужно, чтобы он выполнил этот цикл, а потом при нажатии по кнопке "Далее", которая создается в функции метода $.post, прогнал этот цикл еще раз.

Dimaz 30.11.2012 19:52

Вообщем не стал я выносить функцию start отдельно, а оставил ее внутри функции(function(data){...}) метода $.post. Там же ее определяю, там же и вызываю, передавая в качестве аргумента data:
$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
if(data) {
var fieldsCount = data.length;
var row = '';
if(fieldsCount) {
row = '<form>';
function go(data) {                     //определяю функцию
alert("Ok!");
for (var i in data) {
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>';
}
break;
}
}
go(data);            //вызываю функцию, передавая в параметре 'data', так как цикл использует данные с сервера
row += '<button onclick="return false; go(data);">Далее</button></form>';
$('#feeds').html(row);
}
}
  }, "json"); 
return false;
});
});

Теперь цикл выполняется, но после того как я нажимаю кнопку "Далее", функция больше не работает. Почему так?

vadim5june 30.11.2012 20:12

если Вы пишите onclick="return false; go(data); то до go(data) дело не дойдет надо просто onclick="go(data)"
Но тут у Вас еще и go и data не определены
надо их гдето запоминать

Dimaz 30.11.2012 20:15

Кажется начинаю понимать... Когда нажимаю кнопку 'Далее', происходит вызов функции go с параметром data. Но он не знает откуда взять этот параметр, так как он находится в функции метода $.post. То есть извне эту функцию вызвать нельзя, только из тела функции метода $.post. Как же тогда быть? Может данные с сервера куда-то отдельно сохранять, чтобы их можно было использовать не только в теле этой функции?:-?

Dimaz 30.11.2012 20:17

Цитата:

Сообщение от vadim5june (Сообщение 218825)
если Вы пишите onclick="return false; go(data); то до go(data) дело не дойдет надо просто onclick="go(data)"
Но тут у Вас еще и go и data не определены
надо их гдето запоминать

Ну вот вы уже ответили пока я писал.)))

vadim5june 30.11.2012 20:18

Цитата:

Сообщение от Dimaz
Может данные с сервера куда-то отдельно сохранять, чтобы их можно было использовать не только в теле этой функции?

еще и функцию go тоже не видно по ттем же причинам-надо переделать

Dimaz 30.11.2012 20:22

Цитата:

Сообщение от vadim5june (Сообщение 218828)
еще и функцию go тоже не видно по ттем же причинам-надо переделать

Ну вот я вначале темы и выносил ее отдельно, но почему то не работает в этом случае.:-?

Dimaz 30.11.2012 20:25

Если выношу функцию отдельно, то не передается параметр data. Почему так?

vadim5june 30.11.2012 20:28

Цитата:

Сообщение от Dimaz (Сообщение 218829)
Ну вот я вначале темы и выносил ее отдельно, но почему то не работает в этом случае.:-?

как в начале лучше
там ошибка написано
row = '<form>';
start;

надо start(data)
ну и гдето data запоминать и все нормально будет
return false надо убрать-для чего он Вам не понял

Dimaz 30.11.2012 20:34

Цитата:

Сообщение от vadim5june (Сообщение 218832)
как в начале лучше
там ошибка написано
row = '<form>';
start;

надо start(data)
ну и гдето data запоминать и все нормально будет
return false надо убрать-для чего он Вам не понял

Это я тут не написал start(data), в скрипте у меня прописано. Без return false будет страница перезагружаться, браузер же воспринимает нажатие по кнопке как передачу данных формы.


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