Всем привет! Вот код: Код (Text): <form id="myform"> <select name='firm' id='firm'> <? $firm_id=127; $number_id="C990BE39"; $mark_id="MAN"; $query_firm="SELECT * FROM kt_firm"; $firm=mysql_query($query_firm); while ($firm_=mysql_fetch_array($firm)) { foreach ($firm_ as $key => $value) $firm_[$key]=iconv("Windows-1251", "UTF-8", $value); if ($firm_['id']==$firm_id) $select="selected"; else $select=""; echo "<option value=".$firm_['id']." $select>".$firm_['name']." (".$firm_['pf'].")</option>"; } ?> </select> <br> <select name='number' id='number' disabled></select> <br> <input type='text' name='mark' id='mark' disabled> </form> <script> // value_select - значение изменяемого элемента // query - запрос // coll - тип получаемого значения value // change_element - id элемента, который должен измениться // default_change_element - значение по умолчанию изменяемого элемента // type_element - тип элемента формы (option, input, textarea) function function_change(query, coll, change_element, default_change_element, type_element){ if (type_element == 'option') {$('#'+change_element).html('<option>загрузка...</option>');} if (type_element == 'input') {$('#'+change_element).val('загрузка...');} $('#'+change_element).attr('disabled', true); $.get( 'get_test.php', { query: query, coll:coll, change_element: change_element, default_change_element: default_change_element, type_element: type_element }, onAjaxSuccess ); function onAjaxSuccess (data) { if (type_element == 'option') { $('#'+change_element).html(data); $('#'+change_element).attr('disabled', false); } else {$('#'+change_element).val(data);} alert(data); } }; $('#firm').change(function(){ function_change( 'SELECT * FROM kt_auto WHERE firm=\''+$('#firm').val()+'\'', 'number', 'number', '<?echo $number_id;?>', 'option'); function_change( 'SELECT * FROM kt_auto WHERE number=\''+$('#number').val()+'\'', 'mark', 'mark', '', 'input'); }); $('#number').change(function(){ function_change( 'SELECT * FROM kt_auto WHERE number=\''+$('#number').val()+'\'', 'mark', 'mark', '', 'input'); }); </script> Значения по умолчанию: $firm_id $number_id $mark_id get_test.php - делает запрос в БД, и выдает результат по запрашиваемому полю, в соответствии с запросом query. Как должно работать. При изменении селекта firm, в селект number подтягивается номер машины, а в инпут mark, соответственно марка автомобиля. Как работает. При изменении селекта firm, в селект number подтягивается номер машины, а в инпут mark марка автомобиля подтягивается только после передергивания селекта number. Вроде как на $('#firm').change повесил два события, но alert показывает, что при изменении селекта firm функция function_change возвращает пустой результат для инпута mark. Вопрос: Почему, и как правильно сделать?
@kit, здравствуйте, используйте console.log () вместо alert, чтобы просмотреть подробный результат данных в консоле браузера. Так же убедитесь что присылаете / обрабатываете правильно данные и... блин это пи*** не могу сдержаться... код мощь !! Рекомендую переписать весь выложенный с учетом 2к19 php 7 and sql-injection
@Babka_Gadalka спасибо за совет, но console.log () дает тот же результат что и alert, что не решает моей проблемы. На красоту кода не претендую, т.к. пишу его редко исключительно под узкий круг своих задач раз в год от силы. Вопрос остался прежним - почему при $('#firm').change функция function_change возвращает для инпута mark пустой результат?
Листинга get_test.php здесь вообще нет. Есть ли в нем необходимость, если он для select корректно выдает <option>...</option> со всем необходимым списком, а для input корректное значение value. И get_test.php и function_change работают корректно - передают, обрабатывают и возвращают верные значения. Проблема в $('#firm').change. При смене фирмы, номер машины подгружается верно, но не подгружается марка машины в input. Но при этом при смене номера машины в селекте number, марка машины подгружается верно.