Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2015, 17:49
Новичок на форуме
Отправить личное сообщение для type Посмотреть профиль Найти все сообщения от type
 
Регистрация: 15.10.2015
Сообщений: 4

Редактирование массива с помощью инструментов javascript
Здравствуйте! Я новичок в области web-разработки и только недавно стал сталкиваться с jquery и подобными инструментами. Плохо то, что везде про это пишут разными словами и разными способами, вызывая в голове полнейшую кашу. Надеюсь встретить здесь настоящих профессионалов, которые наставят на истинный путь. Теперь перейду к сути моего вопроса:
есть массив заданий
$question=array(
1=>array(
0=>'T',
1=>'Вопрос 1',
'answer'=>array(
1=>'Вариант ответа 1',
2=>'Вариант ответа 2',
3=>'Вариант ответа 3',
4=>'Вариант ответа 4',
5=>'Вариант ответа 5'
),
'true_answer'=>array(
1=>3
)
),
2=>array(
0=>'T',
1=>'Вопрос 2',
'answer'=>array(
1=>'Вариант ответа 1',
2=>'Вариант ответа 2',
3=>'Вариант ответа 3',
4=>'Вариант ответа 4',
5=>'Вариант ответа 5'
),
'true_answer'=>array(
1=>4
)
),

и так далее. В коде визуализации я вывожу его таким образом:
<?
$k = 1;
foreach($question as $quest){
?>
<table align="center" cellpadding="2" cellspacing="1" width="100%" bgcolor="#000000">
<tr>
<td vAlign="top" bgcolor="#ffffff" style="padding:8px">
<div><strong><?=$quest[1]?></strong><p></div><?
?>Варианты ответов:<p><?
foreach($quest['answer'] as $ans){

?><div><?print('<name="answer">'.$ans.'')?></div><?
}
?><div align="center"><?
print('<input type="button" name="var" id="button'.$k.'" value="Редактировать вопрос" />'); 
?></div>
</td>
</tr>
</table><p><p><?
$k++;

};

?>

Хочется, чтобы при нажатии кнопки(для конкретного вопроса) вылазила форма(с заполненными полями для конкретного вопроса), подобно этой:
div id="dialog-form" title="Edit Question">
<p class="editQuestion"></p>
<form>
<fieldset>
<label for="name"></label>
<input type="text" name="name" id="firstOption" value="" >
<label for="name"></label>
<input type="text" name="name" id="secondOption" value="" >
<label for="name"></label>
<input type="text" name="name" id="thirdOption" value="">
<label for="name"></label>
<input type="text" name="name" id="fourthOption" value="">
<label for="name"></label>
<input type="text" name="name" id="fifthOption" value="">
<input type="submit" tabindex="-1" style="position:absolute; top:-1000px">
</fieldset>
</form>
</div>
и нажав, например, кнопку сохранить варианты ответов в массиве автоматически изменялись на значения полей в форме. Надеюсь на помощь. Критика кода приветствуется.
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2015, 18:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вылазила?

Форму у сервера можно запросить без перезагрузки текущей станицы, а можно и перегрузив ее, и как надо?. А чтобы получить нужное, достаточно передать серверу первичный ключ массива.

PS. редактирование массива, вернее изменение его значений это ладно, а вот как вы собираетесь сохранять эти изменения?

Последний раз редактировалось laimas, 15.10.2015 в 18:06.
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2015, 18:30
Новичок на форуме
Отправить личное сообщение для type Посмотреть профиль Найти все сообщения от type
 
Регистрация: 15.10.2015
Сообщений: 4

Нет, форма не вылазила. Это я просто для примера показал. Хотелось бы без перезагрузки, чтобы можно было нажать сохранить и эти изменения отобразились. А в чем проблема с сохранением изменений? Я что-то совсем не в теме
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2015, 19:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Начать с того, что на сервере результатом такого именования полей:

<input type="text" name="name" id="firstOption" value="" >
....
<input type="text" name="name" id="fifthOption" value="">

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

<input type="text" name="name[1][1]" id="firstOption" value="" >
....
<input type="text" name="name[1][5]" id="fifthOption" value="">

Здесь каждому полю принудительно заданы индексы массива соответствующие ключам вопросов, а первичный ключ равен блоку вопросов (иначе можно было бы так name[]). Тогда получив поля формы "отредактировать" массив будет просто:

if(isset($_POST["name"])) {
    $k = key($_POST['name']);
    array_replace($question[$k]['answer'], $_POST['name'][$k]);
}


А что дальше? Если этот массив нужен на время сессии, то можно его хранить в сессии, но зачем тогда его править? Если же это "база" задач, значит хранить нужно в файле, а еще лучше в базе. Если в файле, то в JSON формате, но учитывать, что функции JSON работают только с utf.

Так что ваш скрипт вряд ли должен начинаться с "есть массив заданий". Сперва надо это сделать, а уж затем чтобы "вылазило". )

PS. Идентификаторы в данном случае совсем не нужны, их используют по потребности, а не потому, что так положено.

Последний раз редактировалось laimas, 15.10.2015 в 19:10.
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2015, 19:47
Новичок на форуме
Отправить личное сообщение для type Посмотреть профиль Найти все сообщения от type
 
Регистрация: 15.10.2015
Сообщений: 4

Это "база" задач и они хранятся в файлах.
Ответить с цитированием
  #6 (permalink)  
Старый 15.10.2015, 20:00
Новичок на форуме
Отправить личное сообщение для type Посмотреть профиль Найти все сообщения от type
 
Регистрация: 15.10.2015
Сообщений: 4

laimas, Вы просто мой вопрос не поняли. Что делать с массивом я дальше разберусь. Мой основной вопрос в том, как сделать, чтобы для каждого отдельного вопроса открывалась своя форма для редактирования и сохраняла его.
Ответить с цитированием
  #7 (permalink)  
Старый 15.10.2015, 20:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,116

type,
на тему
Модернизация теста с возможностью нескольких правильных ответов
Ответить с цитированием
  #8 (permalink)  
Старый 15.10.2015, 20:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сперва надо с представлением данных разбираться, думать над этим, а затем вызывать формы, ибо в вопросе есть и "сохраняла его". Я то все понимаю, а вы нет "новичок в области web-разработки", например, даже если бог с ним что вы там с массивом делать будете:

1) структура его неудачная;
2) вы не представляете, что вам нужно делать с данными ни клиенте, ни на севере, и это вытекает из 1, и представления формы.

Ну не может быть веб приложение написанное так, что сервер сам по себе, а клиент сам по себе, авось договорятся....

Например, форму готовую может отдать сервер, а может и только данные для нее, как значения, а сам html-код формы уже будет построен на клиенте по этим данным. Кроме этого данные на сервере надо будет еще и проверять, и реагировать на ошибки.

Ну а если вы считаете, что это чепуха, и главное это показать форму, ну так:

Вот так, к примеру, на странице должны выглядеть кнопки:

<input type="button" id="choice-1" value="Редактировать вопрос" />

имен им не нужно. Число в имени id, это блок вопросов. Запрос формы этими кнопками:

$(function() {
    $('[id|=choice]').click(function() {
        $.post(url, this.id.replace('-','='), function(d) {
            //d - ответ сервера, какой он будет, какой нужен, я не знаю, читайте выше
            //если готовая форма, то поместить ее код в ...?    
        })
    });
}


На сервере по клику получите $_POST['choice'];

Это простой Ajax запрос jQury. Соответственно и отправлять форму можно Ajax запросом.

Вот в принципе суть того, чего вы хотите, а конкретно как.... это уж вам виднее.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка имени,емейла и пароля с помощью JavaScript KEFIR4UK Events/DOM/Window 1 05.11.2014 19:33
Вывод данных из XML файла на странице HTML с помощью JavaScript. MSDeveloper Общие вопросы Javascript 3 20.08.2014 22:11
Можно ли с помощью javascript создать онлайн(ролевую) игру? eXiN Общие вопросы Javascript 7 23.06.2009 20:57
JavaScript Редактор WYSIWYG - редактирование текстов banyman Элементы интерфейса 23 26.05.2008 15:16
Скроллирование окна браузера с помощью JavaScript. lancer Элементы интерфейса 1 19.02.2008 23:16