2012-01-26 4 views
1

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

<label for="Q09_01"> 
    <input class="Q09" name="Q09[]" id="Q09_01" type="checkbox" /> 
aaa</label> 
<label for="Q09_02"> 
    <input class="Q09" name="Q09[]" id="Q09_02" type="checkbox" value="Q09_02" /> 
bbb</label> 
<label for="Q09_03"> 
    <input class="Q09" name="Q09[]" id="Q09_03" type="checkbox" value="Q09_03" /> 
ccc </label> 
<label for="Q09_04"> 
    <input class="Q09" name="Q09[]" id="Q09_04" type="checkbox" value="Q09_04" /> 
ddd </label>  

JQuery:

$(function(){ 

$('#Q09_01').click(function() { 
$('#Q09_03').attr('disabled', this.checked); 
}); 
$('#Q09_03').click(function() { 
$('#Q09_01').attr('disabled', this.checked); 
}); 

})  

Помимо этой конкретной проблемы, у меня была еще одна аналогичная проблема с радио-кнопки (maintain the state of a radio-toggled div after page reload) и сохранение показать/скрыть/переключения состояния на перезагрузки страницы. Есть ли какая-нибудь функция jQuery, которая будет помнить ВСЕ эти состояния после перезагрузки страницы? Считаете ли вы, что этот http://www.jasonsebring.com/dumbFormState может помочь в достижении того, чего я хочу достичь? Я новичок в jquery, и я буду признателен за любую помощь или подсказки или примеры хороших практик.

+0

Вам удалось исправить вашу проблему? – atmd

ответ

0

Есть два способа сделать это. Вы можете справиться с этим в своем скрипте на стороне сервера, проверив ваш ввод POST и сопоставив его. По существу, проверьте, определена ли переменная (или имеет значение), а если нет, отметьте флажок отключенным. В вашем случае, на самом деле, вы проверяете фактическое представленное значение, так что это фактически будет следовать вашей логике jQuery. Некоторые примитивно PHP, например:

$disable_Q09_01 = $_POST['Q09'] == "Q09_03" 

<input class="Q09" name="Q09[]" id="Q09_01" type="checkbox" 
    <? if ($disable_Q09_01) echo "disabled"; ?> 
/> 

И прости меня, это было время, так как PHP, я просто понял, что это будет более распространенным, чем давать Rails код.

Другим способом было бы создать файл cookie перед отправкой формы. W3 документирует все это here. По существу установите cookie "disable_Q09_01=true", затем прочитайте или очистите его на основе приложения. Я считаю, что этот метод будет менее желательным, так как пользователь может отключить cookies, но это будет работать (ish) независимо от того, какой серверный сценарий вы используете.

+0

Благодарим вас за ответ. Я не знаю php, поэтому, если бы был другой вариант, я бы предпочел не накладывать php-скрипты на мою страницу на этот раз. Я уверен, что в jQuery должен быть способ сделать это, но я не могу понять, как это сделать. – JaneVi

+0

Какой серверный язык вы используете? –

0

Вы пытались использовать локальное или сеансовое хранилище для хранения состояний ваших входов? , вы можете загрузить исходное состояние при загрузке страницы, если существует сеанс или локальное хранилище.

Это можно сделать с помощью JavaScript/JQuery

не будет ivolve никакого кода сервера или печенье

попробовать это для получения дополнительной информации

http://www.beakkon.com/tutorial/html5/web-storage

@ atmd83

+0

Как насчет поддержки браузеров? Я не могу найти информацию об этом. – JaneVi

+0

В jQuery, может быть, просто какое-то простое условие может решить мою проблему? Что-то вроде ** ', если # Q09_01 отмечено, отключить # Q09_03' **? – JaneVi

+0

Вы можете использовать ie behavour как падение назад для поддержки ie6 onwards – atmd

0

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

Таким образом, у вас есть два варианта:

  1. Печенье
  2. HTML5 веб хранения

# 2 не будут поддерживаться всеми браузерами, поэтому я рекомендую идти с # 1. По сути, когда пользователь проверяет поле, создается или обновляется файл cookie.Затем после перезагрузки страницы, после того, как документ будет готов ($(document).ready(..)), вы должны использовать JavaScript, чтобы прочитать куки-файл и внести необходимые изменения в DOM (т. Е. Проверить правильные поля).

Here's a commonly used jQuery cookie plugin.

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

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