2015-05-22 3 views
1

У меня есть веб-приложение, которое включает в себя редактор вопросника. Вопросов много. у каждого может быть много ответов; и каждый вопрос имеет два набора переключателей для настройки различных параметров вопроса.Drag 'n Drop Destroys Идентификационная схема нумерации?

Я использую следующий стиль идентификаторов:

id="Q-$questionNumber" 
id="Q-$questionNumber-A-$answerNumber" 

... где '$ questionNumber' и '$ answerNumber' заменяются соответствующими номерами.

Идентификатор схемы нумерации имеет две функции:

  • Когда элемент щелкнул мой Javascript может исследовать идентификационный номер, чтобы узнать, какой вопрос/ответ он принадлежит.
  • Элементы ввода имеют имена, которые следуют этой же схеме нумерации. Когда форма отправлена, мой PHP-код может определить, с каким номером/номером номера ответа связано связанное с ним значение, путем изучения имени.

Естественно, когда я перетаскиваю вопрос, все эти идентификаторы и имена необходимо перенумеровать. Я написал javascript/jQuery, который успешно все решает и работает правильно. Но он чувствует себя глупым.

Кажется, что я мог удалить схему нумерации из всех идентификаторов и просто выяснить, какой номер номера/ответа на вопрос находится, исследуя его размещение в DOM с помощью jQuery. Но, похоже, мне все равно нужно будет использовать схему нумерации для имен входных элементов, чтобы мой PHP-код на сервере мог определить, какой номер номера/ответа номера принадлежит различным представленным элементам формы.

Есть ли лучший способ?

ОБНОВЛЕНИЕ по запросу Bankzilla. Вот несколько примеров HTML. Это один вопрос. В каждом документе может быть много вопросов, каждый из которых может иметь много ответов.

<div id="Q-1" class="QuestionGroup ui-draggable"> 
    <br> 
    <h2 id="QuestionText-Q-1"> 
     Question #1&nbsp;&nbsp; 
     <input type="text" name="questionText-Q-1" value="" id="questionText-Q-1" class="questionText" maxlength="256" size="70"> 
    </h2> 
    <div class="containerForAnswers"> 
     <p class="answerPar"> 
      <span class="answerLabel answerLabelinEditView">#1:</span> 
      <input type="text" name="Q-1-A-1" value="" id="Q-1-A-1" class="answer answer-Q-1" maxlength="256" size="70"> 
     </p> 
     <p class="answerPar"> 
      <span class="answerLabel answerLabelinEditView">#2:</span> 
      <input type="text" name="Q-1-A-2" value="" id="Q-1-A-2" class="answer answer-Q-1" maxlength="256" size="70"> 
     </p> 
     <p class="answerPar"> 
      <span class="answerLabel answerLabelinEditView">#3:</span> 
      <input type="text" name="Q-1-A-3" value="" id="Q-1-A-3" class="answer answer-Q-1" maxlength="256" size="70"> 
     </p> 
    </div> 
</div> 
+0

Покажите нам, что у вас есть, поэтому мы можем предложить лучший способ. – Bankzilla

ответ

1

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

<input name="Q[1][text]"/> 
<input name="Q[1][answers][]" value="number 1"/> 
<input name="Q[1][answers][]" value="number 2"/> 

Когда у вас есть несколько Q[1][answers][] он будет складывать их, как индекс массива, 0,1,2,3,4.

Если вы должны были сбросить выше из это будет выглядеть

var_dump($_POST); 
array(
    'Q' => array(
     1 => (
      'text' => '', 
      answers => array(
       0 => 'number 1' 
       1 => 'number 2' 
      ) 
     ) 
    ) 
) 

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

+0

. очень круто.Я этого не знал, и это обязательно будет полезно. В то же время, если я удаляю или перетаскиваю элемент ввода, нужно ли мне использовать Javascript для прокрутки и нумерации имен элементов ввода? Даже так ... это было бы не так сложно. Отлично! – VikR

0

Изучив это еще немного, я думаю, что в следующий раз я могу попробовать что-то подобное: оставьте номер номера/идентификаторы номера ответа полностью из всех имен и идентификаторов элементов формы. Когда форма отправляется, идентификаторы номера номера/номера ответа будут добавлены через jQuery ко всем элементам формы. Таким образом, мне не придется обрабатывать нумерацию идентификаторов номер/номер номера вопроса во время перетаскивания, вставки, вырезания/вставки и т. Д.