Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Сделать динамический option (https://javascript.ru/forum/jquery/20796-sdelat-dinamicheskijj-option.html)

prowoke 17.08.2011 21:46

Сделать динамический option
 
Здравствуйте. Вот пытаюсь сделать двойной динамический option.

В общем у меня есть 3 селекта. В первом селекте выбирается жанр музыки, потом по нему подставляется музыканты, потом по музыкантам альбомы выбираются. Так вот проблема моя в том, что когда в самом начале должны загрузится список по умолчанию. У меня альбомы по умолчанию не грузятся. Как будто бы нету ещё тогда dom элемента (option), который создаётся при ajax на musician, а следом за ним идёт на album запрос и вот он не подгружается.

Вот сама функция, которая делая ajax запрос:



function autoOption(id,filename,optionid) {
            $.ajax({
                 type: "POST",
                 url: filename,
                 data: "id=" + id,
                 dataType: 'json',
                 success: function(data) {
                       $("#" + optionid).empty();
                      for (var prop in data) {
                         $("#" + optionid).append("<option value= '" + prop + "'>" + data[prop] + "</option>");
                    }
                 }
            });
   }



Вот, что я написал:
$(document).ready(function() { //читаем дом
                    var id_genre = $('#genre').val();
                    autoOption(id_genre,'getMusician.php','musician');
                        var id_musician = $('#musician').val();
                        autoOption(id_musician, 'getAlbum.php', 'album');

                    $('#genre').change(function() { 
                        id_genre = $('#genre').val();
                        autoOption(id_genre,'getMusician.php','musician');
                        id_musician = $('#musician').val();
                        autoOption(id_musician, 'getAlbum.php', 'album');
                    });
                    
                    $('#musician').change(function() {
                        var id_musician = $('#musician').val();
                        autoOption(id_musician,'getAlbum.php','album');
                    });
                });

Вот, как у меня select идут:
Выберите стиль:
			<select name="genre" id="genre">
                            <?php while($row = $genre_data->getGenre()) { ?>
                                <option value="<?php echo $row['id']; ?>"><?php echo $row['genre']; ?></option>
                            <?php } ?>
                        </select><br>
                Выберите музыканта:
                <select name="musician" id="musician">
                </select><br>
                Выберите альбом:
                <select name="album" id="album">
                </select>

Дело в том, что динамически когда я выбираю меняю элемент из списка #musician
то всё работает. Но когда страница загрузилось только, то в список #album не подсталяется значение. Вот этот момент:

$(document).ready(function() { //читаем дом
                    var id_genre = $('#genre').val();
                    autoOption(id_genre,'getMusician.php','musician');
                        var id_musician = $('#musician').val();
                        autoOption(id_musician, 'getAlbum.php', 'album');


Вот тут 1 значение подставляется в #musician а второе уже по подсталенную значению #musician должно подставить в #album. Но, не подставляет. Сложно обьяснить проблему. Ну в общем, кто сможет, то помогите, пожалуйста.

kostr 18.08.2011 20:45

Цитата:

Сообщение от prowoke
Как будто бы нету ещё тогда dom элемента (option), который создаётся при ajax на musician, а следом за ним идёт на album запрос и вот он не подгружается.

Его и нету. Аякс-то асинхронный. Он еще не отработал, а скрипт уже дальше пошел. Вы бы загрузку альбомов запускали прямо в функции, которая подгрузила музыканта.


Часовой пояс GMT +3, время: 14:51.