Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.11.2012, 16:58
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Не работает функция по кнопке
Всем привет. Помогите разобраться, почему у меня не работает цикл в функции 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, прогнал этот цикл еще раз.
Ответить с цитированием
  #2 (permalink)  
Старый 30.11.2012, 18:52
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Вообщем не стал я выносить функцию 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;
});
});

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

Последний раз редактировалось Dimaz, 30.11.2012 в 18:56.
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2012, 19:12
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

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

Последний раз редактировалось vadim5june, 30.11.2012 в 19:15.
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2012, 19:15
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Кажется начинаю понимать... Когда нажимаю кнопку 'Далее', происходит вызов функции go с параметром data. Но он не знает откуда взять этот параметр, так как он находится в функции метода $.post. То есть извне эту функцию вызвать нельзя, только из тела функции метода $.post. Как же тогда быть? Может данные с сервера куда-то отдельно сохранять, чтобы их можно было использовать не только в теле этой функции?
Ответить с цитированием
  #5 (permalink)  
Старый 30.11.2012, 19:17
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Сообщение от vadim5june Посмотреть сообщение
если Вы пишите onclick="return false; go(data); то до go(data) дело не дойдет надо просто onclick="go(data)"
Но тут у Вас еще и go и data не определены
надо их гдето запоминать
Ну вот вы уже ответили пока я писал.)))
Ответить с цитированием
  #6 (permalink)  
Старый 30.11.2012, 19:18
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Dimaz
Может данные с сервера куда-то отдельно сохранять, чтобы их можно было использовать не только в теле этой функции?
еще и функцию go тоже не видно по ттем же причинам-надо переделать
Ответить с цитированием
  #7 (permalink)  
Старый 30.11.2012, 19:22
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Сообщение от vadim5june Посмотреть сообщение
еще и функцию go тоже не видно по ттем же причинам-надо переделать
Ну вот я вначале темы и выносил ее отдельно, но почему то не работает в этом случае.
Ответить с цитированием
  #8 (permalink)  
Старый 30.11.2012, 19:25
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Если выношу функцию отдельно, то не передается параметр data. Почему так?
Ответить с цитированием
  #9 (permalink)  
Старый 30.11.2012, 19:28
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Dimaz Посмотреть сообщение
Ну вот я вначале темы и выносил ее отдельно, но почему то не работает в этом случае.
как в начале лучше
там ошибка написано
row = '<form>';
start;

надо start(data)
ну и гдето data запоминать и все нормально будет
return false надо убрать-для чего он Вам не понял
Ответить с цитированием
  #10 (permalink)  
Старый 30.11.2012, 19:34
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт не работает при заходе на данную страницу, но работает при рефреше страницы foker jQuery 0 26.11.2012 11:27
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 09:47
НЕ работает функция length Golovastik Серверные языки и технологии 4 14.02.2011 17:31
Не работает функция инфоокна tomAlba Общие вопросы Javascript 0 30.01.2011 00:54
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16