2014-01-23 4 views
0

Я искал несколько десятков подобных вопросов здесь и пытался реализовать предлагаемые решения, но ничего не работает.Кнопка сброса формы форматирования при использовании кнопки «Назад» браузера

У меня есть форма на странице, и я исправил проблему нетерпеливых людей, которые нажимают кнопку «отправить» несколько раз, добавляя событие onclick, которое вызывает javascript, который изменяет текст (значение) кнопки отправки «пожалуйста» wait "и добавляет класс стиля, поэтому я могу изменить кнопку от зеленого до красного. Это событие onclick запускается непосредственно перед скриптом, который фактически отправляет данные формы. Прекрасно работает.

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

Так что я действительно не хочу сбросить форму (хотя это было бы приемлемым решением, даже если это не идеально, так как тогда им нужно было начинать заполнять форму), я просто хочу сбросить кнопка ... потому что теперь моя проблема в том, что когда они вернутся, кнопка STILL красная и все еще говорит «Пожалуйста, подождите».

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

Мой вопрос заключается в следующем: существует ли какой-либо способ заставить браузер делать ЧТО-ТО, когда вы используете кнопку «Назад», с которой я могу работать, чтобы сбросить кнопку или не удалось сбросить форму? Некоторое решение, совместимое с кросс-браузером?

UPDATE: В ответ на запрос @ jammykam, чтобы увидеть код, вот как я сейчас меняю кнопку (обратите внимание, что я на самом деле не делаю его отключенным/не кликабельным, меняю только текст и цвет, чтобы указать, что посетители не должны нажимать на него - отключение кнопки не позволяет исправить ошибки и повторно нажать кнопку submit)

В моем файле functions.php У меня есть фрагмент, чтобы добавить событие onclick в форму (Я использование тяжести формы и получил от этого их форума):

add_filter("gform_submit_button", "add_change_button_text", 10, 2); 
function add_change_button_text($button, $form) { 
    $dom = new DOMDocument(); 
    $dom->loadHTML($button); 
    $input = $dom->getElementsByTagName('input')->item(0); 
    if ($input->hasAttribute('onclick')) { 
     $input->setAttribute("onclick","changebtn();".$input->getAttribute("onclick")); 
    } else { 
     $input->setAttribute("onclick","changebtn();"); 
    } 
    return $dom->saveHtml(); 
} 

ТОГДА в моем файле header.php у меня есть этот код, с hanges текст кнопки и добавляет класс, так что я могу изменить цвет кнопки:

function changebtn() { 
    var button = $("input[type='submit']"); 
    if (button.val() == "Free Quote") { 
     button.val("Please Wait"); 
     button.addClass("plswait'); 
    } else { 
     button.val("Free Quote"); 
    } 
} 

SO, как я уже говорил, это прекрасно работает и изменяет кнопку, и предотвратило несколько кликов, которые мы ранее получали ... ..Я просто не смогли изменить его, когда кто-то использует кнопку «Назад».

+0

Не можете добавить событие OnLoad, который установит его так, как вы этого хотите? Поэтому каждый раз, когда страница загружается, она становится зеленой и подает. – WreithKassan

+0

Опубликовать код о том, как вы можете нажать кнопку отправки – jammykam

+0

Не можете ли вы включить или отключить кнопку? В любом случае форма может быть отправлена ​​с ключом ввода в большинстве браузеров. – RobG

ответ

1

Попробуйте использовать метатеги.

<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<meta http-equiv="expires" content="0" /> 
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
<meta http-equiv="pragma" content="no-cache" /> 

Также вы можете использовать опцию заголовка Cache-Control, отправка с сервера:

Cache-Control: no-cache, max-age=0, must-revalidate, no-store 
+0

Я попробую и отправлю сообщение - спасибо. – Trisha

+1

OK Я просто сделал кучу чтения по управлению кешем, и похоже, что это сработает, чтобы принудительно обновить исходную страницу с помощью кнопки «Назад». И это * может быть решением, которое мы должны будем принять, если мы не сможем найти тот, который соответствует нашему идеалу, а именно просто вернуть кнопку формы обратно в исходное состояние перед отправкой. В идеале мы хотим оставить данные формы там, поэтому, если кто-то хочет повторно отправить и изменить только несколько ответов, им не нужно начинать и снова заполнять всю форму. Но спасибо за это предложение, это было очень поучительно! – Trisha

0

да есть метод, называемый AJAX и история Plugin: подробнее здесь http://benalman.com/projects/jquery-bbq-plugin/ еще один хороший один здесь : https://github.com/browserstate/history.js

+0

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

0

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

Во-первых, я остановлюсь несколько ПРЕДСТАВЛЯЕТ с помощью функции .data

form.on('submit', function(e){ 

    var jq_this = $(this); 

    if(jq_this.data('submitted') === true) 
    { 
     e.preventDefault(); 
     return; 
    } 
    else 
    { 
     jq_this.data('submitted', true); 
    } 
} 

Если данные «представляется» устанавливается истина, которая происходит на первой представить, предотвращаются любые далее утверждает.

Чтобы остановить эту страницу из Keeping «представленный» установлен верно, когда нажата кнопка назад, у меня есть этот блок кода в нижней части моего файла JavaScript

$(window).unload(function() 
{   
    form.data('submitted', false); 
}) 

Функция .unload вызывается, когда пользователь покидает страницу.

подробнее о .unload at the jQuery site

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