jquery выводит не то что хочется)

12
psics
На сайте с 02.04.2009
Offline
130
778

http://jsfiddle.net/7hc2e5c3/3/

Подскажите.

Хочется увидеть модель авто. А выводит только первую букву...

В чем загвоздка?

ДП
На сайте с 23.11.2009
Offline
203
#1


var Auto, acura, brand, currentBrand, forSelect, i, brands;
brands = {
acura :['MDX', 'RDX', 'TL', 'TSX', 'ZDX']
}
jQuery(document).ready(function($)
{
$('#brand').change(function()
{

currentBrand = $('#brand').val();
alert(brands[currentBrand][0]);
//выводит a, а хочется увидеть MDX

});




});

Я так понимаю, марок будет несколько - то лучше хранилище сделать водном объекте, а не имена переменных по марке называть.

HarleyDavidson
На сайте с 05.03.2010
Offline
67
#2

Потому что в currentBrand[0] как раз таки и содержится первая буква полученная из option.

alert(currentBrand); Вот так выведет слово целиком.

Разработка сайтов на WordPress. Доработки. Верстка макетов. Консультации, решения проблем.
psics
На сайте с 02.04.2009
Offline
130
#3
Дикий пионер:

var Auto, acura, brand, currentBrand, forSelect, i, brands;
brands = {
acura :['MDX', 'RDX', 'TL', 'TSX', 'ZDX']
}
jQuery(document).ready(function($)
{
$('#brand').change(function()
{

currentBrand = $('#brand').val();
alert(brands[currentBrand][0]);
//выводит a, а хочется увидеть MDX

});




});

Я так понимаю, марок будет несколько - то лучше хранилище сделать водном объекте, а не имена переменных по марке называть.

до объектов не дорос... Не понимаю я их пока)

подскажите в двух словах на этом примере, если это возможно...

---------- Добавлено 02.04.2015 в 14:08 ----------

HarleyDavidson:
Потому что в currentBrand[0] как раз таки и содержится первая буква полученная из option.
alert(currentBrand); Вот так выведет слово целиком.

это я понимаю. Но выше видите массив acura, надо чтобы брало из него... для примера взял нулевой элемент

то есть сейчас если взять алерт, там написано alert(acura[0]); но выводит не из массива, а из строки...

---------- Добавлено 02.04.2015 в 14:13 ----------

http://jsfiddle.net/7hc2e5c3/9/ - это проба с объектом)

---------- Добавлено 02.04.2015 в 14:25 ----------

также понимаю, что можно через if() написать, но это очень длинная конструкция.

То есть я планирую сделать так.

При выборе из #brand получаем его значение. Дальше в #model выводим все модели текущего бренда по его значению.

можно сделать так, но это долго: if($('#brand') === 'acura')

{

/*вывод <option value="MDX">MDX<option> в #model */

}

else if(/* следующая модель */).

Но мне подсказывает лень, что это не правильно)

ДП
На сайте с 23.11.2009
Offline
203
#4
psics:
до объектов не дорос... Не понимаю я их пока)
подскажите в двух словах на этом примере, если это возможно...

В моём коде переменная brands - это уже объект (вы похоже с классом спутали) (если знакомы с php - считайте ассоциативным массивом) - там ключ первого уровня - это значение value из селетка с марками.

Если надо другие марки - добавляйте аналогично ключи и значения:


brands = {
acura :['MDX', 'RDX', 'TL', 'TSX', 'ZDX'],
audi: ['A4','A3']
}
psics
На сайте с 02.04.2009
Offline
130
#5
Дикий пионер:
В моём коде переменная brands - это уже объект (если знакомы с php - считайте ассоциативным массивом) - там ключ первого уровня - это значение value из селетка с марками.
Если надо другие марки - добавляйте аналогично ключи и значения:

brands = {
acura :['MDX', 'RDX', 'TL', 'TSX', 'ZDX'],
audi: ['A4','A3']
}

а если acura добавить придется еще к примеру, цвет - красный..

и хотелось бы ответ по получению значения...

ДП
На сайте с 23.11.2009
Offline
203
#6
psics:
а если acura добавить придется еще к примеру, цвет - красный..
и хотелось бы ответ по получению значения...

Если добавить цвет - то надо будет вместо строк хранить объекты, типа:

var brands = {
acura: {
"MDX": {
colors: ['white', 'blue', 'yellow'],
type: ['TYPE R','TYPE S']
},
'RDX': {
colors: ['white', 'blue', 'black']
}
}
}

по поводу получения значения - почитайте http://javascript.ru/tutorial/object/intro#dostup-k-svoystvam,

а так в моем примере есть получение значения же - alert(brands[currentBrand][0]);

W
На сайте с 09.04.2013
Offline
46
#7
psics:

То есть я планирую сделать так.
При выборе из #brand получаем его значение. Дальше в #model выводим все модели текущего бренда по его значению.

Вот тут решение http://jsfiddle.net/cnmL21hf/ селект #model заполняется в зависимости от #brand

psics
На сайте с 02.04.2009
Offline
130
#8
Дикий пионер:
Если добавить цвет - то надо будет вместо строк хранить объекты, типа:
var brands = {

acura: {
"MDX": {
colors: ['white', 'blue', 'yellow'],
type: ['TYPE R','TYPE S']
},
'RDX': {
colors: ['white', 'blue', 'black']
}
}
}

по поводу получения значения - почитайте http://javascript.ru/tutorial/object/intro#dostup-k-svoystvam,
а так в моем примере есть получение значения же - alert(brands[currentBrand][0]);

мы видимо не понимаем друг друга...

Смотрите http://jsfiddle.net/7hc2e5c3/12/ - тут понятнее наверное будет

При изменении #brand на Acura мы получаем значение acura.

При alert(currentBrand.brands); таком обращении - выводит undefinded

при alert(acura.brands); - выводит модели...

Так вот мне надо чтобы при первом варианте выводило тоже модели.

Что первый, что второй вариант имеет сейчас в алерте acura.brand - а выводит разные вещи...

ДП
На сайте с 23.11.2009
Offline
203
#9

Вы путаете имя переменной и значение.

В currentBrand у вас значение "acura" и естественно у этой переменной нет свойства brands. а у переменной acura - имя acura.

По идее можно наверно как-то через eval() извратиться, но посмотрите мой пост, который #2 в этой теме - как там реализовано.

З.Ы. у вас есть какой-то опыт в прогрммировании, если да, то на каком языке?

HarleyDavidson
На сайте с 05.03.2010
Offline
67
#10

У вас проблемы с самыми основами.

Например, что делает этот код?

$('#brand').change(function(){

var currentBrand = $('#brand').val();

});

При событии change он берет значение из option и записует его в строку. Т.е. currentBrand это строка с единственным возможным значением "acura". А вы обращаетесь к строке как к объекту acura.brands Что по вашему мнению должно произойти?

---------- Добавлено 02.04.2015 в 16:26 ----------

HarleyDavidson:
А вы обращаетесь к строке как к объекту acura.brands

Я не совсем то хотел сказать. В JS строка это и есть объект, но метода .brands у него само собой нет.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий