2013-03-27 2 views
1

Это связан с моим предыдущим вопросом here, но я думаю, что это более простой.Показать Флажок выбора на странице сводки

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

я борюсь с пониманием процесса от связанного с этим вопроса, мы надеемся, это упрощенная версия поможет мне понять.

Вот мои настройки:

<?php $counter = 1; 
$amount = get_field('select_number_of_questions'); 
$repeater = get_field("step_by_step_test"); 
shuffle($repeater); 
$repeater_limit = array_slice($repeater,0,$amount); 
foreach($repeater_limit as $repeater_row) { ?> 
<div class="form-row"> 
     <div id="modules-repeat">       
      <p class="training"><?php echo $repeater_row['question']; ?></p><br /> 
      <p class="training-highlight">Please choose <span class="bold"><?php echo $repeater_row['required_answers']; ?></span> of the following answers:</p><br /> 
      <?php $rows = $repeater_row['answer_options']; 
      foreach ($rows as $row){ ?> 
      <?php $Question[$counter] = $_POST['answer'.$counter]; ?> 
        <div style="display:table-row;"> 
        <div style="display:table-cell;"> 
         <input style="width: 20px;" type="checkbox" name="answer<?php echo $counter; ?>[]" value="<?php echo the_sub_field('answer'); ?>" /> 
        </div> 
        <div style="display:table-cell;"> 
         <p> 
          <?php echo $row['answer']; ?> 
         </p> 
        </div>    
        </div> 
      <?php } ?> 
      <div class="inner"></div> 
      <button class="next"></button> 

      <div class="clear"></div> 
     </div> 
</div> 
<?php $counter++; } ?> 

<div class="form-row" id="form-row-last" style="display:none;"> 
    <div id="modules-repeat">       
     <p>Summary page</p> 
      <?php foreach($repeater_limit as $repeater_row) { ?> 
       <p class="training"><?php echo $repeater_row['question']; ?></p><br /> 
      <?php } ?> 
      <div class="inner"></div> 
      <button class="next"></button> 
      <div class="clear"></div> 
     </div> 
</div> 

Вот JQuery:

<script type="text/javascript"> 
jQuery(function($) { 
$(document).ready(function() {  

    // prepend a 'previous' button to all form-rows except the first 
    $('<button>').addClass('previous').appendTo($('.inner').not(':first')); 

    // hide all form-rows, but not the first one 
    $('.form-row').not(':first').hide(); 

    // hide on last step 
    $('button.next').last().hide(); 

    // add the submit button to the last form-row 
    $('<input>').addClass('check').prop('type', 'submit').appendTo($('.form-row:last')); 


    // handle the previous button, we need to use 'on' here as the 
    // previous buttons don't exist in the dom at page load 
    $('.form-row').on('click', 'button.previous', function(e) { 
     e.preventDefault(); 
     $(this).parents('div.form-row').hide().prev('div.form-row').show(); 
    }); 

    $('button.next').click(function(e) { 
     // prevent the next buttons from submitting the form 
     e.preventDefault(); 
     // hide this form-row, and show the next one 
     $(this).parents('div.form-row').hide().next('div.form-row').show(); 
    });  

}); 
}); 
</script> 

@Niels в настоящее время имеет самый близкий ответ. Это моя настройка html/php, с использованием jquery из ответа @Niels, она захватывает вопрос, но не тот, который проверен.

<p class="training"><?php echo $repeater_row['question']; ?></p><br /> 
<p class="training-highlight">Please choose <span class="bold"><?php echo $repeater_row['required_answers']; ?></span> of the following answers:</p><br /> 

<div class="question" data-max-answers="<?php echo $repeater_row['required_answers']; ?>"> 
    <?php $rows = $repeater_row['answer_options']; 
    foreach ($rows as $row){ ?> 
    <?php $Question[$counter] = $_POST['answer'.$counter]; ?> 
    <div style="display:table-row;"> 
     <div style="display:table-cell;"> 
      <input style="width: 20px;" type="checkbox" name="answer<?php echo $counter; ?>[]" value="<?php echo the_sub_field('answer'); ?>" /> 
     </div> 
     <div style="display:table-cell;"> 
      <p> 
       <?php echo $row['answer']; ?> 
      </p> 
     </div>    
    </div> 
    <?php } ?> 
</div> 
<div class="inner"></div> 
<button class="next"></button> 
<div class="clear"></div> 
</div> 
+0

В чем вопрос? Что вы пробовали? – Misch

+0

То же самое: в чем проблема? Просто сохраните все данные на СЕССИИ, а в конце (последнем шаге) всех шагов просто проверьте, все ли отправлено. Проверено успешно, покажите резюме. – djot

ответ

1

Почему вы не получаете изменение флажка, а затем сгенерировать список LI или обрывов, где выбор вывешены?Что-то вроде:

$("input[type=checkbox]").on("change", function(){ 
    var html = ""; 
    // Get checked checkboxes 
    $(".form-row").each(function(){ 
     var question = $(this).find(".training").text(), 
      checkedlist = []; 
     $(this).find("input:checked").each(function(){ 
      checkedlist.push($(this).val()); 
     }); 
     // Add question and answers to the summary, only if minimum of 1 checkbox checked 
     if(checkedlist.length) 
     { 
      html += "Question: '" + question + "': " + checkedlist.join(", ") + "<br />"; 
     } 
    }); 

    $(".inner").html(html); 
}); 
+0

Я вернусь к этому проекту. Это очень близко! Каждый раз, когда я проверяю поле, он захватывает вопрос и вводит его в .inner div, но не получает ответ, который они проверяют. Я обновил свой вопрос с помощью кода (нижнего кода). Как я уже сказал, это очень близко к работе. – Rob

+0

Я также добавил щедрость назад, поскольку я пропустил, фактически наградив ее. – Rob

+1

Он должен получить проверенные входы. можете ли вы предупредить об этом в строках? Чтобы узнать, получает ли он проверенные значения. А также предупреждайте '$ (this) .val()', чтобы узнать, действительно ли оно имеет значение. – Niels

0

Возможно, вы захотите чего-то подобного. Не делайте это слишком трудно :)

JSfiddle

JSfiddle (with an example for a question)

HTML

<div class="page1">1<br /><button>Next</button></div> 
<div class="page2">2<br /><button>Next</button></div> 
<div class="page3">3<br /><button>Next</button></div> 
<div class="page4">4<br /><button>Next</button></div> 
<div class="page5">5<br /><button>Next</button></div> 
<div class="page6">6 (end)</div> 

CSS

div[class^="page"] { 
    display: none; 
    margin: 20px auto; 
    padding: 15px; 
    width: 400px; 
    height: 200px; 
    box-sizing: border-box; 
    background-color: orange; 
    -moz-box-shadow: 3px 3px 5px 6px #ccc; 
    -webkit-box-shadow: 3px 3px 5px 6px #ccc; 
    box-shadow:   3px 3px 5px 6px #ccc; 
} 

JavaScript

$(document).ready(function() { 
    $('.page1').css('display', 'block'); 

    $('div[class^="page"] button').click(function(evt) { 
     evt.preventDefault(); 

     // Figure out the current page 
     var page_nr = $(this).parent().attr('class'); 
     page_nr = page_nr.replace('page', '') * 1; 

     // Hide current page 
     $(this).parent().animate(
      { opacity: 'hide', display: 'none' }, 
      750, function() { 
       // Show next page 
       $('.page' + (page_nr + 1)).animate({ opacity: 'show', display: 'block' }, 750); 
      }); 
    }); 
}); 

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

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

Удачи вам!

3

Что бизнес-логика, да?

* Захватите все значения требуемых полей ввода на странице (до пользователя отправить форму), например:

var name = $('#name').val(); 
... 
var city = $('#citySelectBox').val(); 

* Используйте эти переменные при суммарном разделе для отображения цели.

* После просмотра этого, пользователь будет либо отправить форму или внести изменения в уже заполненных полей.

0

Наверное, самые простые/легкие/без хлопот решения не было бы показать все страницы, после того, как «прием» последнюю страницы формы, но инвалидизирующую строку с помощью прозрачных накладок (не отключают свои входы так как это приведет к тому, что представление игнорирует отключенные поля).

Прямо сейчас я не могу помочь вам с кодом, но теоретически это то, что вам нужно ...

Смежные вопросы