2017-01-18 2 views
0

У меня есть динамические поля, которые, когда я нажимаю кнопку, генерируют несколько полей, проблема заключается в том, когда я пытаюсь отправить или обновить. Сгенерированные поля не останутся, и все данные исчезли.Динамические поля остаются, когда возникает ошибка при отправке или обновлении

SCRIPT

<script type="text/javascript"> 
    $(function() 
{ 
    $(document).on('click', '.btn-add', function(e) 
    { 
     e.preventDefault(); 

     var controlForm = $('.controls form .fields:first'), 
      currentEntry = $(this).parents('.fields:first'), 
      newEntry = $(currentEntry.clone()).appendTo(controlForm); 

     newEntry.find('input').val(''); 
     controlForm.find('.btn-add:not(:last)') 
      .removeClass('btn-default').addClass('btn-danger') 
      .removeClass('btn-add').addClass('btn-remove') 

      .html('<span class="glyphicon glyphicon-minus" aria-hidden="true"></span> Remove '); 
    }).on('click', '.btn-remove', function(e) 
    { 
    $(this).parents('.fields:first').remove(); 

    e.preventDefault(); 
    return false; 
    }); 
}); 

</script> 
+1

так будет. При обновлении ваш исходный HTML будет отображаться, и вы не увидите ранее добавленные динамические поля. Обновление страницы так же хорошо, как открытие того же URL-адреса в другом браузере или на другой вкладке текущего браузера. – vijayP

+0

Я вижу, я ищу в других разделах, где говорится о локальном хранилище, но я не знаю, как это сделать. – misdirection

+0

Локальное хранилище - это функция HTML5, с помощью которой мы можем временно сохранить данные, которые могут быть получены позже (до тех пор, пока локальное хранилище не будет очищено). Но даже если вы можете сохранять данные динамического поля в локальном хранилище; вам понадобится дополнительный код для чтения данных локального хранилища и перестроения динамических полей, соответствующих полученным там данным. – vijayP

ответ

0

на основе кода, вы можете попробовать следующий код. Подход - это просто сохранить в localStorage, была ли нажата кнопка. Однако, если ваши данные различаются каждый раз, когда пользователь нажимает (например, данные из базы данных или это случайное генерируемое значение), тогда это не сработает.

$(function() { 
var count = parseInt(sessionStorage.getItem('Count')) || 0; 

    $(document) 
     .on('click', '.btn-add', function(e) { 
      e.preventDefault(); 

      var controlForm = $('.controls form .fields:first'), 
       currentEntry = $(this).parents('.fields:first'), 
       newEntry = $(currentEntry.clone()).appendTo(controlForm); 

      newEntry.find('input').val(''); 
      controlForm.find('.btn-add:not(:last)') 
       .removeClass('btn-default') 
       .addClass('btn-danger') 
       .removeClass('btn-add') 
       .addClass('btn-remove') 
       .html('<span class="glyphicon glyphicon-minus" aria-hidden="true"></span> Remove '); 

      //use sessionStorage 
      count++; 
      sessionStorage.setItem('Count', count); 
     }) 
     .on('click', '.btn-remove', function(e) { 
      $(this).parents('.fields:first').remove(); 

      //reset count 
      count = 0; 
      sessionStorage.setItem('Count', 0); 

      e.preventDefault(); 
      return false; 
     }); 

    for (x = 0; x < count; x++) { 
     $('.btn-add').trigger('click'); 
    } 
}); 
+0

Он работает сэр, но если я добавлю 3 поля, он будет показывать только 2 поля. – misdirection

+0

Ответ обновлен, чтобы обслуживать несколько кликов, а также изменить ограничение подхода, чтобы избежать недоразумений. –

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