Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как получить данные из селекта (https://javascript.ru/forum/dom-window/56001-kak-poluchit-dannye-iz-selekta.html)

makalet 25.05.2015 05:02

Как получить данные из селекта
 
Доброго времени суток всем! Делаю сайт на подобии этого(не реклама) и столкнулся с тем, что надо вывести стоимость, изображение товара, который мы выбрали в селекте. Если значение в селекте "Выбрать", то стоимость и изображение не показывается.
У меня селектов 6-8 штук(ну как на сайте практически) и код, который ниже уж очееень большой как для 1 селекта. Я скрываю изначально поля, а потом при выборе товара - показываю..
Ранее был такой код js(огромный, не правда ли?)
http://jsfiddle.net/f2Lsxh73/3/
А код php сейчас такой

<table>
<thead style='background: #F1F2F7'>
<tr>
<th>Тип</th>
<th>Наименование</th>
<th>Цена, грн.</th>
</tr>
</thead>			
<tr>
<td>Процессор</td>
<td> 
<?php												
echo "<div class='newselect'>";
echo "<select class='chosen' id='chosenmak' name='maker' onchange='updatePrice(this)'>"; 
echo '<option value="0">-- Выбрать --</option>';
foreach ($arr_get as $value) {
	$ID                  = $value['ID'];
	$Price         	 	 = $value['Price'];											
	$Model         		 = $value['Model'];	
	$photo 				 = $value['photo'];
echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Model.'">'."$Model".'</option>';									
}
echo "</select>";				          
echo "</div>";
echo "<span id='model'><img src='$photo' class='t' id='preview'/></span>";
echo "<td><input class='label' id='price_cpu' name='price_cpu' readonly/></td>";				
?>
</td>
</tr>


Другие селекты также сделаны, но только немного другие значения вывожу. http://prntscr.com/791bzt вот так.
JS код изменил на такое для одного селекта.
Изначально всё скрыто и задача опять остается: картинка/стоимость(должны соответствовать товару) скрыты все и должны выводится тогда, когда выбран товар в селекте. Если не выбрано, то скрывать опять.
sel = document.getElementById("myTab").getElementsByClassName("t")
	for(var i=0; i<sel.length; i++) sel[i].style.display = "none";	
 	selLabel = document.getElementById("myTab").getElementsByClassName("label")
	for(var i=0; i<selLabel.length; i++) selLabel[i].style.display = "none";	
 
	function updatePrice(select){
				var image=select.options[select.selectedIndex].getAttribute("data-image");	
                var price=select.options[select.selectedIndex].getAttribute("data-price");
                  document.getElementById('price_cpu').innerHTML = price;
 
          }


Подскажите/помогите:
Как вывести стоимость и картинку товара, который выбран в селекте? Я говорил, что их 6-8
Если ничего не выбрано в селекте, то скрывать/не показывать стоимость и картинку
Я совсем новичок и не знаю как сделать.

ksa 25.05.2015 08:22

Цитата:

Сообщение от makalet
Я совсем новичок и не знаю как сделать.

Для начала нужно сделать простеньких хтмл-пример, на котором можно будет что-то делать...

makalet 25.05.2015 08:42

ksa, я могу скинуть вам файлик, вы посмотрите.
Даже с простеньким примером не получается. :help:

ksa 25.05.2015 08:49

Цитата:

Сообщение от makalet
я могу скинуть вам файлик, вы посмотрите.

Можешь сразу и деньги перечислить на карточку... :D

Цитата:

Сообщение от makalet
Даже с простеньким примером не получается.

Ты его еще даже не сделал...

makalet 25.05.2015 09:03

Цитата:

Сообщение от ksa (Сообщение 372202)
Можешь сразу и деньги перечислить на карточку... :D

Ты его еще даже не сделал...

http://jsfiddle.net/qb4yjkgx/1/

На чистом хтмле вот ссылка выше.
У меня пхп и немного отличается

ksa 25.05.2015 09:15

И что тут нужно сделать?

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<table id='myTab'>
	<tr>
        <th>Тип</th>
		<th>Наименование</th>
		<th>Изображение</th>
		<th>Цена, грн.</th>
    </tr>
	<tr>
	<td>Processors</td>
	<td>
		<select class='t'>
			<option>Выбрать</option>
			<option value='Processors-1'> ЕУІІ 1</option>
			<option value='Processors-2'> ЕУІЕ 2</option>
			<option value='Processors-2'> ЕУІЕ 3</option>		
		</select>
	</td>
	<td><img src='http://javascript.ru/forum/image.php?u=8616&dateline=1282216923'></td>
	<td>22</td>
	</tr>
	<tr>
	<td>Graphics</td>
	<td>
		<select class='t'>
			<option>Выбрать</option>
			<option value='Graphics-1'> Graphics GeForce GTX 970 </option>
			<option value='Graphics-2'> Graphics GeForce GT 720 </option>
			<option value='Graphics-3'> Graphics 333 </option>
		</select>
	</td>
	<td><img src='http://javascript.ru/forum/image.php?u=8616&dateline=1282216923'></td>
	<td>33</td>
</tr>
</table>
</body>
</html>

makalet 25.05.2015 09:22

Цитата:

Сообщение от ksa (Сообщение 372204)
И что тут нужно сделать?

Когда ничего не выбрано, то все элементы скрыты(цена и рисунок). Когда выбирается значение в селекте, то выводится рисунок и цена товара

ksa 25.05.2015 09:25

Но, как я понимаю, рисунки и цены должны быть разные. Где это все брать?

makalet 25.05.2015 09:28

Цитата:

Сообщение от ksa (Сообщение 372209)
Но, как я понимаю, рисунки и цены должны быть разные. Где это все брать?

Да, должны быть разные. Я не знаю как в чистом хтмле назначить для каждого значения в селекте свою цену и картинку. ПО этому я хотел скинуть файлы(бд, пхп), чтобы вы посмотрели и помогли

ksa 25.05.2015 09:55

Цитата:

Сообщение от makalet
Я не знаю как в чистом хтмле назначить для каждого значения в селекте свою цену и картинку.

В параметры можно записать...

ksa 25.05.2015 10:08

Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	$('.t').change(function(){
		var o=$(this.options[this.selectedIndex]);
		var or=$(this.parentNode.parentNode);
		or.find('span').text(o.data('price'));
		or.find('img').attr('src',o.data('img'));
	});
});
</script>
</head>
<body>
<table id='myTab'>
	<tr>
        <th>Тип</th>
		<th>Наименование</th>
		<th>Изображение</th>
		<th>Цена, грн.</th>
    </tr>
	<tr>
	<td>Processors</td>
	<td>
		<select class='t'>
			<option value='' data-price='' data-img='http://javascript.ru/forum/images/smilies/sad.gif'>Выбрать</option>
			<option value='Processors-1' data-price='10' data-img='http://javascript.ru/forum/images/smilies/smile.gif'> ЕУІІ 1</option>
			<option value='Processors-2' data-price='20' data-img='http://javascript.ru/forum/images/smilies/wink.gif'> ЕУІЕ 2</option>
			<option value='Processors-2' data-price='30' data-img='http://javascript.ru/forum/images/smilies/laugh.gif'> ЕУІЕ 3</option>		
		</select>
	</td>
	<td><img src='http://javascript.ru/forum/images/smilies/sad.gif'></td>
	<td><span></span></td>
	</tr>
</table>
</body>
</html>

makalet 25.05.2015 14:58

ksa, сделал как у вас - http://prntscr.com/795ode вот что получилось. Код хпх на первой странице в 1 посте

ksa 25.05.2015 15:32

makalet, у нас на работе отслеживают интернет-трафик и адреса УРЛ... Да и с ПХП я не работаю, использую другой серверный язык.

makalet 25.05.2015 21:41

ksa,:cray: Я за помощь на пивко бы дал

makalet 26.05.2015 05:46

ksa, как не пытаюсь поместить картинку и цену в разные td - ничего не получается. http://prntscr.com/79g85m
<tr>
<td>Процессор</td>
 <td> 
    <div class='newselect'>
       <select class='chosen' id='chosenmak' name='maker' > 
	  <option value="0" value='' data-price=''>-- Выбрать --</option>
		<?php 
			foreach ($arr_get as $value) {
			$ID  = $value['ID'];
			$Price  = $value['Price'];											
		        $Model = $value['Model'];	
                        $photo  = $value['photo'];

	  echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Manufacture.' ">'."$Manufacture"." "."$Model"." '</option>';									
	}
            ?>
      </select>				          
     </div>
<img src='' name='image_cpu'  id='preview'/>
<span ></span>
</td>   
</tr>

Подскажите:
1. Когда img и span обертываю в tr, то выводит пустоту.
2. Также, когда выбрано значение "Выбрать", то цена и картинка не скрываются. Как исправить?
3. Вот ваш пример. http://jsfiddle.net/tngebbfx/ Как считать всю стоимость и вывести ее в поле "Итого"?
4. Можно ли как-то взять значение с option (например, ."$Manufacture"." "."$Model"." ) и внедрить в value?? Очень нужно так сделать, чтобы в value заного не прописывать переменные

laimas 26.05.2015 06:00

echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Manufacture.' ">'."$Manufacture"." "."$Model"." '</option>';

Может все таки:
echo '<option data-fabric="'.$Manufacture.'" data-image="'.$photo.'" value="'.$Price.' ">'."$Manufacture"." "."$Model"." '</option>';

makalet 26.05.2015 06:44

laimas, а что изменилось? Поменял у себя на вашу строку. Ничего

kostyanet 26.05.2015 07:18

Цитата:

Сообщение от makalet
Я совсем новичок и не знаю как сделать.

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

kostyanet 26.05.2015 07:40

Сайт который не реклама построен инженерно. То есть коммерцией они не занимаются, ничего не впаривают, типа надо заранее знать что хочешь и просто профтыкать в селектах свои хотелки посматривая время от времени на бюджет.

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

Да нихера они не совмещаются и не надо ничего совмещать. Забивание телеги товаром ничем не отличается от комплектования компа. Нахера лишние сущности? Все давным-давно отработано и вы можете лишь улучшить, если получится.

Короче, у вас есть обычный каталог и в нем есть кнопки Купить. Человеку впаривается товар, он нажимает кнопку Купить - индентификатор и цена валятся в куки. Человек открывает телегу - видит что навалил в нее. Смотрит, сравнивает, редактирует, все как обычно. Интерфейс ему все показывает, считает, дает ссылки и все такое. Затем юзверь жмет кнопку Оформить и готово.

makalet 26.05.2015 07:49

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

kostyanet 26.05.2015 08:08

При чем тут клиент? Это в бд должно быть определено что к чему подходит и выбрать что не подходит будет просто невозможно. Ну то есть коню ясно что у вас просто специфическая телега, не такая как на сайтах шмоток или интерьеров где человек сам решает что ему подходит, а интерфейс может только подсказывать. Когда речь идет о железках то подсказки перемещаются в определения и все.

Ну или заведите вторую телегу с такой спецификой и соотв. вторую кнопку - Сохранить. Будет тогда 2 - Купить иниипет - и Сохранить - в комплектацию. Комплектаций (папок, namespace'ов) может быть 1 или несколько.

kostyanet 26.05.2015 08:11

Ну если вы на сайт машинок зайдете, то как сможете добавить в комплектацию выбранной деревянной модели узлы и агрегаты из фарша другой модели или даже другого бренда. Ну вот, у вас то же самое.

У долбоящеров на том не рекламном сайте почему-то все начинается с монитора.

laimas 26.05.2015 08:35

Цитата:

Сообщение от makalet
а что изменилось? Поменял у себя на вашу строку. Ничего

Тогда вопрос - а каково назначение этого списка? Если для выбора товара, то первичным значением должна быть не цена, и тем более фото и прочее, а ID товара. Почему этого важного и определяющего товар параметра нет в списке, это удивительно. Но если у вас свои "тараканы" и это оправдано, то уж первичным значением должна быть цена. С этого определения и надо плясать, а уж потом определяться что и как на клиенте.

makalet 26.05.2015 08:36

kostyanet, я это понимаю. Но задача сейчас не в этом же. Вы читали, что мне нужно сделать?

kostyanet 26.05.2015 08:41

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

Короче, мне вообще по барабану, это ваше дело как вы там не знаете.

makalet 26.05.2015 08:43

laimas, назначение списка - подобрать комплектующие. http://prntscr.com/79hb8h - выбирается значение. И рядом в столбцах должны отобразиться изображение(при клике переходим на товар для подробности) и цена его.

makalet 26.05.2015 08:44

kostyanet, я не говорил, что знаю. Я js не знаю и не скрываю этого.

laimas 26.05.2015 08:49

Вот это для чего?
<?php
            foreach ($arr_get as $value) {
            $ID  = $value['ID'];
            $Price  = $value['Price'];                                         
                $Model = $value['Model'];  
                        $photo  = $value['photo'];
 
      echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Manufacture.' ">'."$Manufacture"." "."$Model"." '</option>';                                 
    }
?>

Кстати, определять переменную $Price = $value['Price']; только ради того, чтобы ее поместить в строку, это просто разводить мусор в коде. И $value['photo'] - это плохо, если это путь.

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

Вот как поймете это, придет просветление того, с чем же должен работать как клиентский скрипт, так и серверный.

makalet 26.05.2015 08:53

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

kostyanet 26.05.2015 08:55

Вобщем нормально делается так: заводится отношение n^M - энное число отношений ко многим и вся комплектация по спецификациям в нее загоняется. Адаптеры с переходниками как-то надо приделать еще. Тогда любой выбор в прошлом работает как фильтр для всех остальных в будущем.

Что касается ответа на вопрос как загрузить все и показывать только то, что выбрано - так: в контейнер для рендера опции пихается хтмл сделанный по параметрам опции. Если параметров нет - пихается пусто. Все просто должно быть.

То есть разница лишь в том, что данные уже загружены. Все остальное в точности соответствует схеме загрузки данных по требованию.

kostyanet 26.05.2015 08:58

Цитата:

Сообщение от makalet
Я js не знаю и не скрываю этого.

Да и php судя по гавнокоду на двойку.

laimas 26.05.2015 08:59

kostyanet, может хватит лабуду в постах гнать? Или с корточек встань.

laimas 26.05.2015 09:00

Цитата:

Сообщение от makalet
для вывода всего списка моделей. Модель определять должна.

Так чем определяться?!

kostyanet 26.05.2015 09:08

Кстати, "на подобии" - предлог и пишется слитно и вот так: наподобие - "Тогда **, растопыря ноги наподобие буквы хера и подбочась наподобие ферта, произнёс следующую краткую и выразительную речь." Чуть более сложные предлоги: "в течение" и "в заключение". Запомните чтоб быть грамотнее.

Цитата:

Сообщение от makalet
Я скрываю изначально поля, а потом при выборе товара - показываю..

Схему загрузки по требованию по аяксу видели? Сделайте то же самое, только данные берите не с сервера, а с option.

makalet 26.05.2015 09:08

kostyanet, именно. Я ж сказал, что новичок. И про говнокод тоже знаю.
laimas, в смысле, определяться? Если на вывод данных, то по имени селекта. Если я понял правильно

kostyanet 26.05.2015 09:09

Цитата:

Сообщение от laimas (Сообщение 372359)
kostyanet, может хватит лабуду в постах гнать? Или с корточек встань.

"Отлезь гнида"

kostyanet 26.05.2015 09:13

Цитата:

Сообщение от makalet
И про говнокод тоже знаю.

Так не бывает. Если вы знаете какой он гавнокод - то не гавните, а сразу пишете нормально.

Что касается js, то js он вообще, а js для браузера со всей тряхомудией загруженной страницы - в частности.

То есть js как скриптовый язык применяется не только в браузерах. Просто через браузеры он стал популярным. В винде вы можете писать скрипты на точно таком же js, только DOM там нет, в ФШ есть DOM и есть js, который оперирует объектами в том самом доме, который никакого отношения к хмтлю само собой.

В этом смысле изучать приходится не js, а ту часть, которая сношается с DOM, то есть фактически DOM.

Ну вот, зная о такой проперти дом-объекта как innerHTML (еще есть outerHTML) вы пользуетесь парсером браузера чтобы превратить кусок _нового_ хтмля - в часть document obkect model. Вы ему текст - вам рендер текста и элементы.

makalet 26.05.2015 09:14

Цитата:

Сообщение от kostyanet (Сообщение 372361)
Кстати, "на подобии" - предлог и пишется слитно и вот так: наподобие - "Тогда **, растопыря ноги наподобие буквы хера и подбочась наподобие ферта, произнёс следующую краткую и выразительную речь." Чуть более сложные предлоги: "в течение" и "в заключение". Запомните чтоб быть грамотнее.



Схему загрузки по требованию по аяксу видели? Сделайте то же самое, только данные берите не с сервера, а с option.

К сожалению, не видел.

laimas 26.05.2015 09:15

kostyanet, ты уже достал тут всех своим словесным поносом.

makalet 26.05.2015 09:15

kostyanet, я начал на гавнокоде писать. Потом начну с нуля смотреть PDO по учебникам.


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