Имя: Пароль:
IT
Веб-мастеринг
Javascript'исты помогите туплю.
0 v-kam
 
25.09.15
11:37
Что то не могу догнать как сделать очистку полей.
Смысл:
Есть форма подачи объявления с автозаполнением.
Пользователь выбирает марку - загружается модель, выбираем модель - загружаются года выпуска, выбирает год выпуска - ..., etc.
Так вот если пользователь уже выбрал допустим марку, модель, год, кузов. А потом вдруг берет и меняет допустим марку, значит надо загрузить модели этой марки а все следующие поля очистить и заблокировать.
Как сделать такое что то не догоню.

Код прилагаю

html:

<div class="mod">
<span id="url"></span>
<table>
  <tr>
    <td>Марка:</td>
    <td><select id="mark" name="mark"><?php echo get_mark(); ?></select></td>
  </tr>
  <tr>
    <td>Модель:</td>
    <td><select id="model" name="model"></select></td>
  </tr>
  <tr>
    <td>Год:</td>
    <td><select id="year" name="year"></select></td>
  </tr>
  <tr>
    <td>Кузов:</td>
    <td><select id="body" name="body"></select></td>
  </tr>
  <tr>
    <td>Поколение:</td>
    <td><select id="breed" name="breed"></select></td>
  </tr>
  <tr>
    <td>Двигатель:</td>
    <td><select id="engine" name="engine"></select></td>
  </tr>
  <tr>
    <td>Привод:</td>
    <td><select id="drive" name="drive"></select></td>
  </tr>
  <tr>
    <td>КПП:</td>
    <td><select id="gearbox" name="gearbox"></select></td>
  </tr>
  <tr>
    <td>Модификация:</td>
    <td><select id="modification" name="modification"></select></td>
  </tr>
</table>
</div>

javascript:

(function() {
    "use strict";
    
    // все поля по очереди
    var field = ["mark", "model", "year", "body", "breed", "engine", "drive", "gearbox", "modification"];
    
    // функция отправляет запрос и передает объектом json в callBack
    var load = function(element, callBack) {
        
        var url = "add_json.php?field_name=" + element.name;
        
        // собираем url до текущего поля
        for (var i = 0; i < field.length; i++) {
        
            var current = document.getElementById(field[i]);
            
            url += "&" + current.name + "_id=" + current.value;
            
            if (current === element) break;
        }
        
        // отправляем запрос, вызываем callBack
        $.getJSON(url, function(data){
            callBack.call(data)
        })
    };
    
    // функция заполняет поля, !!!рекурсия
    var get_data = function (element) {
        
        var select = false;
        
        for (var i = 0; i < field.length; i++) {
            
            var current = document.getElementById(field[i]);
            
            if (select) {
                load(element, function() {
                                        
                    $(current).empty().append("<option value=\"\">зделайте выбор</option>");
                    
                    for (var i=0; i<this.length; i++) {
                        $(current).append("<option value=\""+this[i]['id']+"\">"+this[i]['name']+"</option>");
                    }
                    
                    // если вариант выбора только один - выбираем его и продолжаем грузить.
                    if (this.length == 1) {
                        current.children[1].selected = true;
                        
                        get_data(current);
                    }
                });
                
                break;
            }
            
            if (current == element) select = true;
        }
    }
    
    // Отрабатываем событие
    $('.mod').on('change', 'select', function() {
        get_data(this);
    });
    
})();
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс