Использование JQuery/Javascript для предварительной обработки онлайн-форм перед их сохранением

Мне нужна помощь в предварительной обработке входных данных онлайн-формы перед отправкой и сохранением их в базе данных. Эта форма фактически делается с помощью компонента ChronoForms в Joomla 3.1. Форма создается с использованием HTML, а обработка выполняется с использованием JQuery/JavaScript с использованием действия "Load JS" внутри события "OnLoad" (для тех, кто знаком с ChronoForms).

Упрощенная форма выглядит следующим образом:

<form name="online_form" id="online_form">
    <select name="period_year" id="period_year">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
    <select name="period_month" id="period_month">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
    <input type="hidden" name="period" id="period"/>
    <input type="submit" id="submit_form"/>
</form>

То, что я хочу сделать, это когда пользователи отправили форму, значения для period_year и period_month объединяются в текстовую строку "x year и y months" и делаются как значения для period. База данных будет хранить только период вместо period_year и period_month.

Я попытался использовать прослушиватель событий при отправке формы, но это не сработало:

window.addEvent('domready', function() {
    $('online_form').addEventListener('submit', 
        function() { 
            var period_year = $('period_year').value;
            var period_month = $('period_month').value;
            $('period').value=period_year+' year and '+period_month+' months';
        }
    );
}

Другой альтернативой было использование атрибута onchange в элементе select следующим образом, но он мне тоже не помог:

....
<select name="period_year" id="period_year" onchange="process()">...</select>
<select name="period_month" id="period_month" onchange="process()">...</select>
....

Для руководителя:

function process() {
    $('period').value=period_year+' year and '+period_month+' months';
};

Что я сделал не так? Или есть другие правильные способы сделать это?

2 ответа

Необходимость # выбрать элементы с их идентификатором

$('#online_form').submit(function() {   
//-^---here
     $('#period').val(period_year+' year and '+period_month+' months');
     //-^---here

)};

Вам нужно использовать # для селектора идентификаторов ("#id") также изменяется value в val(), значение используется с DOM объект и селектор вернутся jQuery объект. Если вы хотите использовать значение, используйте [0] индексатор для преобразования объекта JQuery в объект DOM.

$('#online_form').addEventListener('submit', 
    function() { 
        $('#period').val(period_year+' year and '+period_month+' months');
        //$('period')[0].value=period_year+' year and '+period_month+' months';
    }
);
Другие вопросы по тегам