Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сделать downlist с выдачей результат в div (https://javascript.ru/forum/misc/56146-sdelat-downlist-s-vydachejj-rezultat-v-div.html)

indeterm 02.06.2015 19:13

<html>
<head>
<meta charset="windows-1251" />
</head>
<body>

<div id="selects"></div>
<div id="out"></div>

<script>

SubObject={
clone: function(){
  var o=Object.create(this)
  if(this.init) this.init.call(o)
  return o
 },
 extend: function(o){
  for(var i in o) {if(!o.hasOwnProperty(i)) return this; this[i]=o[i]} return this
 }
}

Select=SubObject.clone()
Select.extend({
 init: function(){
  this.self=document.createElement("select")
  this.self.onchange=function(){this.setChild()}.bind(this)
  this.parent=selects
},
 append: function(){this.parent.appendChild(this.self); return this},
 setChild: function(){
   if(this.child) this.parent.removeChild(this.child.self)
   this.child=Select.clone()
   this.child.setValues(window[this.self.value])
   this.child.self.onchange=function(){out.innerHTML=this.value}
   this.child.self.onchange()
   this.child.append()
   return this
 },
 setValues: function(values){
   for(var i in values) {
    if(!(values.hasOwnProperty(i))) return this; this.self.appendChild(new Option(values[i], i))
   }
   return this
 }
})

main={
 hardDrive: "жесткий диск",
 videoCard: "видеокарта",
 audioCard: "аудиокарта"
}

hardDrive={
 "$1": "отремонтировать XHard",
 "$2": "отремонтировать YHard", 
 "$3": "отремонтировать ZHard", 
}
videoCard={
 "$10": "отремонтировать XVideo",
 "$20": "отремонтировать YVideo", 
 "$30": "отремонтировать ZVideo", 
}
audioCard={
 "$100": "отремонтировать XAudio",
 "$200": "отремонтировать YAudio", 
 "$300": "отремонтировать ZAudio", 
}

select=Select.clone()
select
 .setValues(main)
 .append()
 .setChild()




</script>

</body>
</html>

bloodmoneys 02.06.2015 19:34

laimas,
Полностью согласен, но, это лендинг пэйдж и позиций всего 4 и должно быть всё быстро и динамично.
indeterm, Спасибо большое за готовое решение, буду теперь разбираться как это работает)

рони 02.06.2015 20:09

Зависимые селекты ссылки по теме
 
bloodmoneys,
http://javascript.ru/forum/dom-windo...tml#post271084

http://javascript.ru/forum/dom-windo...tml#post231937
http://javascript.ru/forum/dom-windo...tml#post149585
http://javascript.ru/forum/dom-windo...tml#post359760
http://javascript.ru/forum/jquery/41...tml#post271975

laimas 02.06.2015 21:03

Цитата:

Сообщение от bloodmoneys
Полностью согласен, но, это лендинг пэйдж и позиций всего 4 и должно быть всё быстро и динамично.

Да хоть сотня позиций, все равно будет динамично.

А вообще-то все это странно. Можно установить фиксированные цены за услуги, временные затраты на которые и расходные комплектующие заблаговременно известны. Иначе просто перечень услуг без цен. Ну к примеру, обращаются по причине отсутствия изображения на экране. Каким образом хозяин устройства не имеющий понятия в электронике может знать, что причиной служит видео карта, а не иное? А если, к примеру, взять ноутбук еще с подсветкой ламповой, то могут быть виновны и видео карта, и ВВ преобразователь, и лампа подсветки, а значит менять матрицу, и цены то у комплектующих разные.

В общем подозрительная контора получается. :)

indeterm 02.06.2015 21:48

Цитата:

Сообщение от laimas
все равно будет динамично.

Динамично то будет(в смысле интерактивно), а вот то что быстро -- не факт. И сервак лишний раз без нужды дергать нах не вперлось.

laimas 02.06.2015 21:53

Цитата:

Сообщение от indeterm
И сервак лишний раз без нужды дергать нах не вперлось.

Ну как говорил хозяин темы, всего четыре позиции, значит да, можно и с клиента получать. Но в случае расширения услуг, это уже не годится, перелопачивать придется весь код.

Получение списков адресов, это вообще тысячи записей, ну и не так долго ответ ждать приходится, да и мера эта вынужденная.

bloodmoneys 03.06.2015 09:20

laimas,
Просто сама концепция лендинг пэйджа такая, что главное в нём это что-бы пользователь оставил заявку на консультацию. А в скрипте только явные позиции, а если нет такой позици, то вот пожалуйста вам кнопочка заявки консультации.


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