it-swarm.com.ru

Как перезагрузить текущую страницу без потери данных формы?

Могу ли я перезагрузить текущую страницу без потери данных формы? Я использовал..

window.location = window.location.href;

а также 

window.location.reload(true);

Но эти две вещи не могут получить более ранние данные для меня. Что случилось ? Когда вы обновляете браузер вручную, это нормально (я не теряю данные формы). Пожалуйста, покажите мне, как это понять.

Вот мой полный код ...

<div class="form-actions">
        <form>
            <table cellpadding = "5" cellspacing ="10">
                <tr class="control-group">
                    <td style="width: 100px;">
                        <div>Name:&nbsp;<font color="red">(*)</font></div>
                    </td>
                    <td>
                        <input type="text" id="inputName" placeholder="Name" required>
                    </td>
                </tr>
                <tr class="control-group">
                    <td>
                        <div>Email:&nbsp;<font color="red">(*)</font></div>
                    </td>
                    <td>
                        <input class="span3" placeholder="[email protected]" id= "inputEmail" type="email" required>
                    </td>
                </tr>
                <tr class="control-group">
                    <td>
                        <div>Phone:&nbsp;</div>
                    </td>
                    <td>
                        <input type="text" id="inputPhone" placeholder="phone number">
                    </td>
                </tr>
                <tr class="control-group">
                    <td>
                        <div>Subject:&nbsp;<font color="red">(*)</font></div>
                    </td>
                    <td>
                        <input type="text" id="inputSubject" placeholder="Subject" required>
                    </td>
                </tr>
                <tr class="control-group">
                    <td colspan ="2">
                        <div>
                            <div>Detail:&nbsp;</div>
                            <div class="controls">
                                <textarea id="inputDetail"></textarea>
                            </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                    <div>
                        <label style="font-weight: bold;" class="checkbox"> <input id="confirmCheck" value="" type="checkbox">
                                I Agree to the Personal information handling policy
                        </label>
                    </div>
                    <div id = "alert_placeholder"></div>
                        <div class="acceptment">
                            [Personal information handling policy]<br> <br>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <div align="center">
                            <button id="btnConfirm" class="btn btn-primary">Confirm</button>
                            <input type="reset" style="width: 65px; height: 27px;" id="btnReset" class="btn">
                        </div>
                    </td>
                </tr>
            </table>
        </form>
    </div>

И в моем файле JS ..

function bind() {
$('#btnConfirm').click(function(e) {
    if ($('#confirmCheck').is(":checked")) {
        getConfirmationForSendFAQ();
    }
    else {
        e.preventDefault();
        showalert("You should accept \"Personal Information Policy\" !", "alert-error");
    }
});};function getConfirmationForSendFAQ() {
    var name = $('#inputName').val();
    var email = $('#inputEmail').val();
    var phone = $('#inputPhone').val();
    var subject = $('#inputSubject').val();
    var detail = $('#inputDetail').val();

    $('.form-actions').empty();
    html = [];
    html.Push("<table cellpadding ='8' class = 'submitInfo'");
    html.Push("<tr>");
    html.Push("<td class = 'title'>Name:</div>");
    html.Push("<td class = 'value'>"+ name +"</td>");
    html.Push("</tr>");

    html.Push("<tr>");
    html.Push("<td class = 'title'>Email Address:</div>");
    html.Push("<td class = 'value'>"+ email +"</td>");
    html.Push("</tr>");

    if (phone.trim().length > 0) {
        html.Push("<tr>");
        html.Push("<td class = 'title'>Phone No:</div>");
        html.Push("<td class = 'value'>"+ phone +"</td>");
        html.Push("</tr>");
    }

    html.Push("<tr>");
    html.Push("<td class = 'title'>Subject:</div>");
    html.Push("<td class = 'value'>"+ subject +"</td>");
    html.Push("</tr>");

    html.Push("<tr>");
    html.Push("<td class = 'title'>Detail Info:</div>");
    html.Push("<td class = 'value'>"+ detail +"</td>");
    html.Push("</tr>");

    html.Push("<tr>");
    html.Push("<td colspan='2'><div align = 'center'>");
    html.Push("<button id='btnSend' class='btn btn-primary' style='width: 65px;'>Send</button>");
    html.Push("<button id='btnReturn' class='btn btn-inverse' style='width: 65px; height: 27px; margin-left: 5px;'>Return</button>");
    html.Push("</div></td></tr>");

    html.Push("</table>");
    $('.form-actions').append(html.join(''));
    $('#btnReturn').click(function(e) {
        // HERE I WANT TO KNOW HOW TO DO.....
    });
    $('#btnSend').click(function(e) {
        alert("Doom");
    });}
50
Cataclysm

Вы можете использовать различные локальные механизмы хранения для хранения этих данных в браузере, такие как Web Storage, IndexedDB, WebSQL (устарело) и File API (устарело и доступно только в Chrome) (и UserData с IE).

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

Например, вы можете (упрощенно) сделать что-то вроде этого, когда страница собирается перезагрузиться:

window.onbeforeunload = function() {
    localStorage.setItem("name", $('#inputName').val());
    localStorage.setItem("email", $('#inputEmail').val());
    localStorage.setItem("phone", $('#inputPhone').val());
    localStorage.setItem("subject", $('#inputSubject').val());
    localStorage.setItem("detail", $('#inputDetail').val());
    // ...
}

Веб-хранилище работает синхронно, поэтому это может работать здесь. При желании вы можете сохранить данные для каждого события размытия на элементах, в которые вводятся данные.

При загрузке страницы вы можете проверить:

window.onload = function() {

    var name = localStorage.getItem("name");
    if (name !== null) $('#inputName').val("name");

    // ...
}

getItem возвращает null, если данные не существуют.

Используйте sessionStorage вместо localStorage, если вы хотите хранить только временные.

48
user1693593

Я изменил код K3N, чтобы он работал для моих целей, и добавил некоторые комментарии, чтобы помочь другим понять, как работает sessionStorage. 

<script>
    // Run on page load
    window.onload = function() {

        // If sessionStorage is storing default values (ex. name), exit the function and do not restore data
        if (sessionStorage.getItem('name') == "name") {
            return;
        }

        // If values are not blank, restore them to the fields
        var name = sessionStorage.getItem('name');
        if (name !== null) $('#inputName').val(name);

        var email = sessionStorage.getItem('email');
        if (email !== null) $('#inputEmail').val(email);

        var subject= sessionStorage.getItem('subject');
        if (subject!== null) $('#inputSubject').val(subject);

        var message= sessionStorage.getItem('message');
        if (message!== null) $('#inputMessage').val(message);
    }

    // Before refreshing the page, save the form data to sessionStorage
    window.onbeforeunload = function() {
        sessionStorage.setItem("name", $('#inputName').val());
        sessionStorage.setItem("email", $('#inputEmail').val());
        sessionStorage.setItem("subject", $('#inputSubject').val());
        sessionStorage.setItem("message", $('#inputMessage').val());
    }
</script>
20
Doug Wilhelm

Найдите это на GitHub. Специально для этого создан.

https://Gist.github.com/zaus/4717416

7
Rajan Rawal

Этот ответ был чрезвычайно полезен для меня и избавляет от необходимости вручную проходить через каждое поле:

Использование jQuery для хранения состояния сложной формы

6
Julian K
window.location.reload() // without passing true as argument

работает для меня.

4
Naveen Agarwal

Как отмечают некоторые ответы, localStorage является хорошим вариантом, и вы, безусловно, можете сделать это самостоятельно, но если вы ищете полированный вариант, на GitHub уже есть проект, который делает это с именем garlic.js .

3
nickytonline

Обычно я автоматически отправляю свою собственную форму на сервер и перезагружаю страницу с заполненными аргументами. Замените аргументы-заполнители параметрами, полученными вашим сервером.

3
moutonjr

Согласитесь с HTML5 Local Storage ..___. Это пример кода

2
dikkini

Вы должны отправить данные и перезагрузить страницу (форма рендеринга на стороне сервера с данными), просто перезагрузка не сохранит данные. Просто ваш браузер может кэшировать данные формы при ручном обновлении (не то же самое в разных браузерах). 

2
Dileep

Вы можете использовать localStorage ( http://www.w3schools.com/html/html5_webstorage.asp ) для сохранения значений перед обновлением страницы.

2
paka

Вы можете использовать библиотеку, которую я написал, FormPersistence.js , которая обрабатывает (де) сериализацию, сохраняя значения в локальном/сессионном хранилище. Этот подход похож на который связан в другом ответе но он не требует jQuery и не сохраняет незашифрованные пароли в веб-хранилище.

let myForm = document.getElementById('#my-form')
window.addEventListener('beforeunload', () => FormPersistence.save(myForm, true))
window.addEventListener('onload', () => FormPersistence.load(myForm, true))

Если вы хотите очистить сохраненные данные при успешной отправке формы:

myForm.addEventListener('submit', () => FormPersistence.clearStorage(myForm, true))

Второй параметр каждой функции FormPersistence определяет, использовать ли локальное хранилище (false/absent) или хранилище сеансов (true). В вашем случае хранилище сеансов, скорее всего, более уместно.

0
Vulcan

Зарегистрируйте прослушиватель событий для события keyup:

document.getElementById("input").addEventListener("keyup", function(e){
  var someVarName = input.value;
  sessionStorage.setItem("someVarKey", someVarName);
  input.value = sessionStorage.getItem("someVarKey");
});
0
Himanshu Agrawal