Как повторно заполнить динамически сгенерированные параметры для поля выбора?

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

Например, параметры частоты: «день», «другой день» и «неделя». Если я выберу «день», параметры частоты изменятся на «5 дней», «15 дней» и «30 дней».

Проблема Проблема возникает, когда пользователь отправляет форму с ошибками, форма возвращается со всеми повторно заполненными полями формы и выделенными ошибками, за исключением поля выбора частоты, параметры которого динамически сгенерировано. Он не выделен, и его параметры являются параметрами по умолчанию.

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

Код Я использую jquery и подключаемый модуль jquery под названием cascade, чтобы связать два поля вместе. (http://plugins.jquery.com/project/cascade)

Вот мой собственный JavaScript.

Этот скрипт генерирует список опций:

var list1 = [
    {'When':'86400','Value':' ','Text':' '},
    {'When':'172800','Value':' ','Text':' '},
    {'When':'604800','Value':' ','Text':' '},
    {'When':'86400','Value':'432000','Text':'5 days'},
    {'When':'86400','Value':'1296000','Text':'15 days'},
    {'When':'86400','Value':'2505600','Text':'30 days'},
    {'When':'172800','Value':'1296000','Text':'15 days'},
    {'When':'172800','Value':'2505600','Text':'30 days'},
    {'When':'172800','Value':'3888000','Text':'45 days'},
    {'When':'604800','Value':'2505600','Text':'4 weeks'},
    {'When':'604800','Value':'3715200','Text':'6 weeks'},
    {'When':'604800','Value':'4924800','Text':'8 weeks'}
];

function commonTemplate(item) {
    return "<option value='" + item.Value + "'>" + item.Text + "</option>"; 
};

function commonMatch(selectedValue) {
    return this.When == selectedValue; 
};

И это скрипт, который запускает генерацию опций выбора:

jQuery("#duration).cascade("#frequency",{
    list: list1,            
    template: commonTemplate,
    match: commonMatch          
})

Вопрос Есть какие-нибудь мысли о том, как заставить динамически генерируемые параметры частоты повторно заполняться, когда форма возвращается в браузер с ошибками? Можно ли использовать каскадный плагин, который я сейчас использую, или какой-то другой метод?

Помощь очень ценится. :-)


person Rick    schedule 30.04.2009    source источник
comment
+1 за хорошо сформулированный вопрос от первого пользователя. Это почти слишком редкое событие в этих краях...   -  person Paolo Bergantino    schedule 30.04.2009
comment
Спасибо, Паоло. :) Очень хотел убедиться, что получил хороший ответ, поэтому задал подробный вопрос. Надеюсь, я не переборщил.   -  person Rick    schedule 30.04.2009


Ответы (1)


Я не знаком с этим плагином, но не могли бы вы просто запустить событие change() #duration и/или #frequency в document.ready?

$(document).ready(function() {
    $('#duration').change();
    $('#frequency').change();
});

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

person Paolo Bergantino    schedule 30.04.2009
comment
Похоже, это сработает, и я работаю над этим. Но теперь проблема, похоже, в том, что частота, которая не генерируется динамически, не заполняется повторно. :( Устраняю это, а потом посмотрю, работает ли ваше решение. - person Rick; 30.04.2009
comment
Это сделало это. Спасибо, Паоло. :) - person Rick; 30.04.2009
comment
Хотя, последнее замечание, мне нужно было только .change() #частота. - person Rick; 30.04.2009
comment
Да, я думал, что это будет только частота, я просто не был уверен в настройках, поэтому я добавил туда оба для верности. Я думал, ты разберешься с этим оттуда. Рад, что это помогло. - person Paolo Bergantino; 30.04.2009