За последние 24 часа нас посетил 21951 программист и 1102 робота. Сейчас ищут 748 программистов ...

Изменения при изменении изменяемого меню

Тема в разделе "JavaScript и AJAX", создана пользователем kit, 4 апр 2019.

  1. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Всем привет!
    Вот код:

    Код (Text):
    1. <form id="myform">
    2. <select name='firm' id='firm'>
    3. <?
    4. $firm_id=127;
    5. $number_id="C990BE39";
    6. $mark_id="MAN";
    7. $query_firm="SELECT * FROM kt_firm";
    8. $firm=mysql_query($query_firm);
    9. while ($firm_=mysql_fetch_array($firm)) {
    10.     foreach ($firm_ as $key => $value) $firm_[$key]=iconv("Windows-1251", "UTF-8", $value);
    11.     if ($firm_['id']==$firm_id) $select="selected"; else $select="";
    12.     echo "<option value=".$firm_['id']." $select>".$firm_['name']." (".$firm_['pf'].")</option>";
    13. }
    14. ?>
    15. </select>
    16. <br>
    17. <select name='number' id='number' disabled></select>
    18. <br>
    19. <input type='text' name='mark' id='mark' disabled>
    20. </form>
    21. <script>
    22.  
    23. //    value_select            - значение изменяемого элемента
    24. //    query                    - запрос
    25. //    coll                    - тип получаемого значения value
    26. //    change_element            - id элемента, который должен измениться
    27. //    default_change_element    - значение по умолчанию изменяемого элемента
    28. //    type_element            - тип элемента формы (option, input, textarea)
    29.  
    30. function function_change(query, coll, change_element, default_change_element, type_element){
    31.     if (type_element == 'option') {$('#'+change_element).html('<option>загрузка...</option>');}
    32.     if (type_element == 'input') {$('#'+change_element).val('загрузка...');}
    33.     $('#'+change_element).attr('disabled', true);
    34.     $.get(
    35.         'get_test.php', {
    36.             query: query,
    37.             coll:coll,
    38.             change_element: change_element,
    39.             default_change_element: default_change_element,
    40.             type_element: type_element
    41.         },
    42.         onAjaxSuccess
    43.     );
    44.     function onAjaxSuccess (data) {
    45.         if (type_element == 'option') {
    46.             $('#'+change_element).html(data);
    47.             $('#'+change_element).attr('disabled', false);
    48.         }
    49.         else {$('#'+change_element).val(data);}
    50.         alert(data);
    51.     }
    52. };
    53.  
    54. $('#firm').change(function(){
    55.     function_change(
    56.         'SELECT * FROM kt_auto WHERE firm=\''+$('#firm').val()+'\'',
    57.         'number',
    58.         'number',
    59.         '<?echo $number_id;?>',
    60.         'option');
    61.  
    62.     function_change(
    63.         'SELECT * FROM kt_auto WHERE number=\''+$('#number').val()+'\'',
    64.         'mark',
    65.         'mark',
    66.         '',
    67.         'input');
    68.  
    69. });
    70.  
    71. $('#number').change(function(){
    72.     function_change(
    73.         'SELECT * FROM kt_auto WHERE number=\''+$('#number').val()+'\'',
    74.         'mark',
    75.         'mark',
    76.         '',
    77.         'input');
    78. });
    79.  
    80. </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.
    Вопрос: Почему, и как правильно сделать?
     
    #1 kit, 4 апр 2019
    Последнее редактирование: 4 апр 2019
  2. Babka_Gadalka

    Babka_Gadalka Активный пользователь

    С нами с:
    16 фев 2019
    Сообщения:
    162
    Симпатии:
    23
    Адрес:
    Москва, Пушкина, Избушкина, 2й этаж душечка.
    @kit, здравствуйте, используйте console.log () вместо alert, чтобы просмотреть подробный результат данных в консоле браузера. Так же убедитесь что присылаете / обрабатываете правильно данные и... блин это пи*** не могу сдержаться... код мощь !! Рекомендую переписать весь выложенный с учетом 2к19 php 7 and sql-injection
     
  3. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    @Babka_Gadalka спасибо за совет, но console.log () дает тот же результат что и alert, что не решает моей проблемы. На красоту кода не претендую, т.к. пишу его редко исключительно под узкий круг своих задач раз в год от силы.
    Вопрос остался прежним - почему при $('#firm').change функция function_change возвращает для инпута mark пустой результат?
     
  4. Babka_Gadalka

    Babka_Gadalka Активный пользователь

    С нами с:
    16 фев 2019
    Сообщения:
    162
    Симпатии:
    23
    Адрес:
    Москва, Пушкина, Избушкина, 2й этаж душечка.
    Если вверху код из get_test.php .. то немедленно удаляюсь.
     
  5. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Листинга get_test.php здесь вообще нет. Есть ли в нем необходимость, если он для select корректно выдает <option>...</option> со всем необходимым списком, а для input корректное значение value. И get_test.php и function_change работают корректно - передают, обрабатывают и возвращают верные значения. Проблема в $('#firm').change. При смене фирмы, номер машины подгружается верно, но не подгружается марка машины в input. Но при этом при смене номера машины в селекте number, марка машины подгружается верно.
     
  6. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Спасибо, что никто не помешал решить проблему самому