2014-02-17 3 views
0

У меня есть большой хэш, как это который имеет марки и модели автомобилей:Обновления динамического выбора выпадающего значения из хэша

makes_models = { «AM General»: [ «Hummer»], «Acura» : [«CL», «ILX», «ILX « Гибрид »,« Интегра »,« Легенда »,« MDX »,« NSX »,« RDX »,« RL »,« RLX »,« RSX », " SLX »,« TL »,« TLX »,« TSX »,« TSX Sport Wagon »,« Vigor »,« ZDX »],« Alfa Romeo »: [« 4C »],« Aston Martin »: [« DB7 »,« DB9 »,« DBS »,« Rapide »,« Rapide S »,« V12 Vanquish »,« V12 Vantage »,« V8 Vantage »,« Vanquish », « Virage »],« Audi »: «100», «200», «80», «90», «A3», «A3 e-tron», «A4», «A5», «A6», «A7», «A8», «Cabriolet», «Coupe», «Q1», «Q3», «Q5», «Q7», «R8», «RS 4», «RS 5», «RS 6 «S7», «S7», «S5», «S5», «S5», «S7», «S7», «S7», «S7», «S7», «S7», V8" , "Allroad", "Allroad Quattro"]}

у меня есть выбор, который позволяет выбрать хэш-ключ модели:

<%= vehicle.select(:make, options_for_select(["AM General", "Acura", ...])) %> 

у меня есть JQuery обновить модель выбора на основе выбранной марки:

$('select#quote_vehicles_make').change(function() { 
    $.each(models[$(this).val()], function(idx, value) { 
     $('select#quote_vehicles_models').html("<option>" + value + "</option>"); 
    }); 
}); 

Выбор модели:

<select id="quote_vehicles_models"> 
    <option>...</option> 
</select> 

Проблема заключается в том, что выбор возвращает только последнее значение в makes_models хэш. Так что если, например, я выбираю: Acura, то модели выберите обновления и только показывает: ZDX

screenshot

  1. Как исправить этот JQuery?
  2. Является ли их простым решением rails/jQuery для создания динамических блоков выбора из хэша?

ответ

0

Я решил свою собственную проблему: JQuery:

$('select#quote_vehicles_make').change(function() { 
    $('select#quote_vehicles_models').empty(); 
    $.each(models[$(this).val()], function(idx, value) { 
     $('select#quote_vehicles_models').append("<option>" + value + "</option>"); 
    }); 
}); 

Тем не менее заинтересованы в Rails ориентированных решение, если оно существует. Благодарю.

0

рассмотрит структуру данных здесь:

def make 
    {"AM General":["Hummer"], "Acura":["CL", "ILX", "ILX Hybrid", "Integra", "Legend", "MDX", 
     "NSX", "RDX", "RL", "RLX", "RSX", "SLX", "TL", "TLX", "TSX", "TSX Sport Wagon", "Vigor", " 
     ZDX"], "Alfa Romeo":["4C"], "Aston Martin":["DB7", "DB9", "DBS", "Rapide", "Rapide S", "V12 
     Vanquish", "V12 Vantage", "V8 Vantage", "Vanquish", "Virage"], "Audi":["100", "200", "80", 
     "90", "A3", "A3 e-tron", "A4", "A5", "A6", "A7", "A8", "Cabriolet", "Coupe", "Q1", "Q3", 
     "Q5", "Q7", "R8", "RS 4", "RS 5", "RS 6", "RS 7", "S3", "S4", "S5", "S6", "S7", "S8", "SQ5", 
     "TT", "TT RS", "TTS", "V8", "allroad", "allroad quattro"]}[model] 
end 

, то вы можете сделать список моделей для каждого транспортного средства как:

make[@vehicle.model] 

вы можете сделать это с помощью JQuery тоже просто определить функцию сделать как функцию javascript, получить выбранную модель и передать ее функции make. выход будет представлять собой массив make для этой модели, который затем можно передать в качестве параметров html для следующего поля выбора.

Смежные вопросы