2017-01-23 7 views
0

Я ищу (что я думаю) простое решение, которое, я уверен, есть, но я просто не могу найти.Несколько значений из одного варианта выбора

Что я делаю, это создание инструмента цитирования на основе HTML. В настоящее время у меня это так, что, когда пользователь выбирает параметр из раскрывающегося списка, заполняется текстовое поле. То, что я хотел бы иметь этот вариант выбора, это заполнить текстовое поле AND отображение изображения. Например, пользователь выбирает опцию бейсбольного трикотажа, а в текстовом поле вы видите цену, в то время как в div (или пролете или что-то в этом роде), который высаживается в другом месте на странице, вы видите изображение трикотажа. С каждым другим вариантом вы видите другую цену в текстовом поле и другое изображение в div/span.

Я видел вещи на этом форуме, которые приближаются, но они либо немного отличаются от того, что я пытаюсь выполнить, либо они недостаточно полны для меня, чтобы понять (например, пропустить некоторый код, чтобы сделать всю вещь Работа). Было бы высоко оценено любое руководство или ссылка на решение.

Спасибо.

Вот код:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

<style type="text/css"> 
body { 
font-family: sans-serif; 
} 

table, tr, td { 
border: 1px solid #000; 
} 

tr:nth-child(even) {background: #efefef} 
tr:nth-child(odd) {background: #ffffff} 

td { 
padding: 15px; 
} 

form { 
display: inline-block; 
} 

input { 
color: #2a388f; 
padding: 5px; 
margin: 0 20px 0 0; 
font-weight: 900; 
width: 50px; 
border-radius: 7px; 
} 

input:hover { 
background: #efefef; 
border: 2px solid #000; 
} 

input:focus { 
color: #474747; 
background: #efefef; 
} 

#result { 
width: 100px; 
color: #2a388f; 
font-weight: 900; 
font-size: 1.75em; 
} 

</style> 

<script type="text/javascript"> 
window.sum=() => 
document.getElementById('result').value= 
    Array.from(
    document.querySelectorAll('#majors_01,#majors_02,#majors_03,#majors_04,#majors_05,#majors_06') 
    ).map(e=>parseInt(e.value)||0) 
    .reduce((a,b)=>a+b,0) 
</script> 

</head> 
<body> 

<table> 
    <tr> 
     <td> 
<h2>Majors</h2> 

<form name="majors_01_jerseys" onsubmit="CheckForm()"> 
<select onchange="document.majors_01_jerseys.majors_01.value=this.value"> 
<option value="">Select a Jersey Model</option> 
<option value="30.00" onkeyup="sum();">Teamwork 1751B</option> 
<option value="21.00" onkeyup="sum();">Teamwork 1755B</option> 
<option value="27.00" onkeyup="sum();">Teamwork 1757B</option> 
<option value="27.00" onkeyup="sum();">Teamwork 1825B</option> 
<option value="28.00" onkeyup="sum();">Majestic Cool Base</option> 
</select> 
$<input type="text" id="majors_01" onkeyup="sum()" name="majors_01"/> 
</form> 

<form name="majors_02_graphics" onsubmit="CheckForm()"> 
<select onchange="document.majors_02_graphics.majors_02.value=this.value"> 
<option value="">Select Front Graphics Options</option> 
<option value="10.00" onkeyup="sum();">Left Chest (one-color) - $10</option> 
<option value="14.00" onkeyup="sum();">Left Chest (two-color) - $14</option> 
<option value="15.00" onkeyup="sum();">Wordmark (one-color) - $15</option> 
<option value="16.00" onkeyup="sum();">Wordmark (two-color) - $15</option> 
<option value="17.00" onkeyup="sum();">Wordmark (three-color) - $15</option> 
</select> 
$<input type="text" id="majors_02" onkeyup="sum()" name="majors_02"/> 
</form> 

<form name="majors_03_numbers_front" onsubmit="CheckForm()"> 
<select onchange="document.majors_03_numbers_front.majors_03.value=this.value"> 
<option value="">Front Numbers?</option> 
<option value="0" onkeyup="sum();">No - $0</option> 
<option value="3" onkeyup="sum();">Yes (one-color) - $3</option> 
<option value="5" onkeyup="sum();">Yes (two-color) - $5</option> 
</select> 
$<input type="text" id="majors_03" onkeyup="sum()" name="majors_03"/> 
</form> 

<form name="majors_04_numbers_back" onsubmit="CheckForm()"> 
<select onchange="document.majors_04_numbers_back.majors_04.value=this.value"> 
<option value="">Select Back Number Options</option> 
<option value="8" onkeyup="sum();">One-color - $8</option> 
<option value="12" onkeyup="sum();">Two-color - $12</option> 
</select> 
$<input type="text" id="majors_04" onkeyup="sum()" name="majors_04"/> 
</form> 

<form name="majors_05_player_name" onsubmit="CheckForm()"> 
<select onchange="document.majors_05_player_name.majors_05.value=this.value"> 
<option value="">Select Player Name Options</option> 
<option value="0" onkeyup="sum();">None - $0</option> 
<option value="5" onkeyup="sum();">Player Last Name - $5</option> 
</select> 
$<input type="text" id="majors_05" onkeyup="sum()" name="majors_05"/> 
</form> 

<form name="majors_06_patch" onsubmit="CheckForm()"> 
<select onchange="document.majors_06_patch.majors_06.value=this.value"> 
<option value="">Little League Patch?</option> 
<option value="1" onkeyup="sum();">Yes - $1</option> 
<option value="0" onkeyup="sum();">No - $0</option> 
</select> 
$<input type="text" id="majors_06" onkeyup="sum()" name="majors_06"/> 
</form> 

Total: $<input type="text" id="result" disabled> 
     </td> 
    </tr> 
    <tr> 
     <td> 
<h2>AAA</h2> 

     </td> 
    </tr> 
    <tr> 
     <td> 
<h2>AA</h2> 

     </td> 
    </tr> 

</table> 

</body> 
</html> 

Fiddle: http://jsfiddle.net/8hdv3e5h/

+0

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

+0

Попробуйте себя и разместите код – Milaci

+0

Пожалуйста, прочитайте [ask]. Ключевые фразы: «Поиск и ** исследование **» и «Объясните ... любые трудности, которые мешали вам самим решить». –

ответ

1

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

<option data-imgsrc='baseball_1.png'>Baseball Jersey</option> 

При этом, вы можете установить обработчик с помощью JQuery или JavaScript, который выполняется каждый раз, когда выбран вариант. Я могу предоставить некоторые детали для этого, если вы хотите. Затем вы потянете атрибут data-imgsrc, как если бы вы выбрали любой другой атрибут в HTML. Он возвращается в виде строки, и вы можете использовать эту строку для установки src для любого элемента изображения, который вы хотите.

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

Если вы можете использовать jquery, назначение обработчика - тривиальная задача. С ванильным javascript это все еще выполнимо, но будет немного сложнее. Я уверен, что вы можете найти ресурсы, чтобы выяснить какой-либо метод в другом месте. Надеюсь, это то, что вы ищете!

+0

Спасибо. Я сделал быстрый Googling на data-imgsrc, и это звучит так, как будто это может привести меня в правильном направлении. Я не профессиональный писатель кода по какой-то части воображения, и некоторые вещи javascript теряются на мне. Я знаю, что достаточно, чтобы быть опасным и пилить, и приспосабливаться, когда мне нужно сделать что-то, что соответствует моим потребностям, но для этого конкретного упражнения я начинаю пустым. Ссылка на Fiddle находится здесь: jsfiddle.net/8hdv3e5h. –

0

Я был в состоянии понять это. Here is the Plunker

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 

<style type="text/css"> 
body { 
font-family: sans-serif; 
} 

table, tr, td { 
border: 1px solid #000; 
} 

tr:nth-child(even) {background: #efefef} 
tr:nth-child(odd) {background: #ffffff} 

td { 
padding: 15px; 
} 

form { 
display: inline-block; 
} 

input { 
color: #2a388f; 
padding: 5px; 
margin: 0 0 0 10px; 
font-weight: 900; 
width: 50px; 
border-radius: 7px; 
} 

input.jersey_name { 
color: #2a388f; 
padding: 5px; 
margin: 0 20px 0 0; 
font-weight: 900; 
width: 130px; 
border-radius: 7px; 
} 

input:hover { 
background: #efefef; 
border: 2px solid #000; 
} 

input:focus { 
color: #474747; 
background: #efefef; 
} 

#result { 
width: 100px; 
color: #2a388f; 
font-weight: 900; 
font-size: 1.75em; 
} 

.thumb { 
width: 20px; 
} 

div.hide{ 
display: none; 
} 

#large-jersey-box-majors { 
width: 300px; 
height: 300px; 
border: 2px solid #000000; 
border-radius: 7px; 
} 

a.tooltip {outline:none;text-decoration: none; } 
a.tooltip strong {line-height:30px;} 
a.tooltip:hover {text-decoration:none;} 
a.tooltip span { 
z-index:10;display:none; padding:14px 20px; 
margin-top:-30px; margin-left:28px; 
width: 450px; line-height:16px; 
font-weight: 900; 
} 

a.tooltip:hover span{ 
display:inline; position:absolute; color:#111; 
border:1px solid #DCA; background:#fffAF0;} 
.callout {z-index:20;position:absolute;top:30px;border:0;left:-12px;} 

/*CSS3 extras*/ 
a.tooltip span 
{ 
border-radius: 4px; 
box-shadow: 5px 5px 8px #CCC; 
} 

img.jersey-example { 

} 

</style> 

<script type="text/javascript"> 
window.sum=() => 
document.getElementById('result').value= 
    Array.from(
    document.querySelectorAll('#majors_01,#majors_02,#majors_03,#majors_04,#majors_05,#majors_06,#majors_07') 
    ).map(e=>parseInt(e.value)||0) 
    .reduce((a,b)=>a+b,0) 
</script> 

<script type="text/javascript"> 
function fade(div_id, button) { 
    if(button.value == 'Hide Section') { 
     $('#'+div_id).fadeOut('slow'); 
     button.value = 'Reveal Section'; 
    } 
    else { 
     $('#'+div_id).fadeIn('slow'); 
     button.value = 'Hide Section'; 
    } 
} 

$('div').fadeOut(1); 
</script> 

</head> 
<body> 

<table> 
    <tr> 
     <td> 
<h2>Majors</h2> 

<!-- Come back to this section 
<form name="majors_01_jerseys" onsubmit="CheckForm()"> 
<select id="majors_01_jerseys" onchange="document.majors_01_jerseys.majors_01.value=this.value;fade('large-jersey-box-majors', this);"> 
<option value="">Select a Jersey Model</option> 
<option value="30.00" data-src="http://www.teamworkathletic.com/media/img/product/17/1751B/large-4P.jpg">Teamwork 1751B</option> 
<option value="21.00" data-src="http://www.teamworkathletic.com/media/img/product/17/1755B/large-1.jpg">Teamwork 1755B</option> 
<option value="27.00" data-src="http://www.teamworkathletic.com/media/img/product/17/1757B/large-15.jpg">Teamwork 1757B</option> 
<option value="27.00" data-src="http://www.teamworkathletic.com/media/img/product/18/1825B/large-1.jpg">Teamwork 1825B</option> 
<option value="29.90" data-src="http://www.majesticathletic.com/store/productimages/details/10754_columbia_blue_l_z.jpg">Majestic Cool Base 684Y</option> 
<option value="32.54" data-src="http://www.uesports.com/imgrep/12107/image-440-0.jpg">UE B0173 (fully braided)</option> 
</select> 
$<input type="text" id="majors_01" onkeyup="sum()" name="majors_01"/> 
--> 

<h1>Jersey Builder</h1> 
<p>Build your own jersey by choosing the options from the drop-down menu items. Be sure to "tab" through the fields so you can see the running total for your custom garment. 

<form name="majors_01_jerseys" onsubmit="CheckForm()"> 
<select id="majors_01_jerseys" onchange="document.majors_01_jerseys.majors_01.value=this.value;"> 
<option value="" data-src="http://www.teamworkathletic.com/media/img/product/18/1852B/large-54.jpg">Select a Jersey Model</option> 
<option value="30.00" data-src="http://www.teamworkathletic.com/media/img/product/17/1751B/large-4P.jpg">Teamwork 1751B</option> 
<option value="21.00" data-src="http://www.teamworkathletic.com/media/img/product/17/1755B/large-1.jpg">Teamwork 1755B</option> 
<option value="27.00" data-src="http://www.teamworkathletic.com/media/img/product/17/1757B/large-15.jpg">Teamwork 1757B</option> 
<option value="27.00" data-src="http://www.teamworkathletic.com/media/img/product/18/1825B/large-1.jpg">Teamwork 1825B</option> 
<option value="29.90" data-src="http://www.majesticathletic.com/store/productimages/details/10754_columbia_blue_l_z.jpg">Majestic Cool Base 684Y</option> 
<option value="32.54" data-src="http://www.uesports.com/imgrep/12107/image-440-0.jpg">UE B0173 (fully braided)</option> 
</select> 
$<input type="text" id="majors_01" onkeyup="sum()" name="majors_01"/> 

<script type="text/javascript"> 
$("#majors_01_jerseys").on('change', function(){ 
    $("#swap").attr("src", $(this).find(":selected").attr("data-src")); 
}); 
</script> 

</form> 

<form name="majors_02_graphics" onsubmit="CheckForm()"> 
<select onchange="document.majors_02_graphics.majors_02.value=this.value"> 
<option value="">Select Front Graphics Options</option> 
<option value="2.75" onkeyup="sum();">Left Chest Silkscreen (one-color) - $2.75</option> 
<option value="3.75" onkeyup="sum();">Left Chest Silkscreen (two-color) - $3.75</option> 
<option value="4.75" onkeyup="sum();">Left Chest Silkscreen (three-color) - $4.75</option> 
<option value="2.75" onkeyup="sum();">Wordmark Silkscreen (one-color) - $2.75</option> 
<option value="3.75" onkeyup="sum();">Wordmark Silkscreen (two-color) - $3.75</option> 
<option value="4.75" onkeyup="sum();">Wordmark Silkscreen (three-color) - $4.75</option> 
<option value="3.75" onkeyup="sum();">Left Chest Heat Press (one-color) - $3.75</option> 
<option value="7.50" onkeyup="sum();">Left Chest Heat Press (two-color) - $7.50</option> 
<option value="11.25" onkeyup="sum();">Left Chest Heat Press (three-color) - $11.25</option> 
<option value="3.75" onkeyup="sum();">Wordmark Heat Press (one-color) - $3.75</option> 
<option value="7.50" onkeyup="sum();">Wordmark Heat Press (two-color) - $7.50</option> 
<option value="11.25" onkeyup="sum();">Wordmark Heat Press (three-color) - $11.25</option> 
</select> 

<a href="#" class="tooltip">?<span><img class="callout" src="http://www.menucool.com/tooltip/cssttp/callout.gif" /> 
<table align="center"> 
<tr> 
<th colspan="2">Front Graphic Types</th> 
</tr> 
<tr> 
<td><img src="https://csllbaseball.sharepoint.com/_layouts/15/guestaccess.aspx?docid=18ed0925ba5a14f539446eea820a62173&authkey=AbGQc20JIYaHPT8IF5rlnlI"></td><td>Left Chest</td> 
</tr> 
<tr> 
<td><img src="https://csllbaseball.sharepoint.com/_layouts/15/guestaccess.aspx?docid=15e75308695b04b6395666ac4dbf7b20b&authkey=Ac2AiBm7WkDMocdSokDmelg"></td><td>Wordmark</td> 
</tr> 
</table> 
</span> 
</a> 
&nbsp;&nbsp;&nbsp; 
$<input type="text" id="majors_02" onkeyup="sum()" name="majors_02"/> 
</form> 

<form name="majors_03_numbers_front" onsubmit="CheckForm()"> 
<select onchange="document.majors_03_numbers_front.majors_03.value=this.value"> 
<option value="">Front Numbers?</option> 
<option value="0" onkeyup="sum();">No - $0</option> 
<option value="2.25" onkeyup="sum();">Yes (one-color) - $2.25</option> 
<option value="7.00" onkeyup="sum();">Yes (two-color) - $7.00</option> 
</select> 
$<input type="text" id="majors_03" onkeyup="sum()" name="majors_03"/> 
</form> 

<form name="majors_04_numbers_back" onsubmit="CheckForm()"> 
<select onchange="document.majors_04_numbers_back.majors_04.value=this.value"> 
<option value="">Select Back Number Options</option> 
<option value="8" onkeyup="sum();">One-color - $8</option> 
<option value="12" onkeyup="sum();">Two-color - $12</option> 
</select> 
$<input type="text" id="majors_04" onkeyup="sum()" name="majors_04"/> 
</form> 

<form name="majors_05_player_name" onsubmit="CheckForm()"> 
<select onchange="document.majors_05_player_name.majors_05.value=this.value"> 
<option value="">Select Player Name Options</option> 
<option value="0" onkeyup="sum();">None - $0</option> 
<option value="2.25" onkeyup="sum();">Player Last Name - $2.25</option> 
</select> 
$<input type="text" id="majors_05" onkeyup="sum()" name="majors_05"/> 
</form> 

<form name="majors_06_patch" onsubmit="CheckForm()"> 
<select onchange="document.majors_06_patch.majors_06.value=this.value"> 
<option value="">Little League Patch?</option> 
<option value="1" onkeyup="sum();">Yes - $1</option> 
<option value="0" onkeyup="sum();">No - $0</option> 
</select> 
$<input type="text" id="majors_06" onkeyup="sum()" name="majors_06"/> 
</form> 

<form name="majors_07_youth_or_adult" onsubmit="CheckForm()"> 
<select onchange="document.majors_07_youth_or_adult.majors_07.value=this.value"> 
<option value="">Youth or Adult?</option> 
<option value="0" onkeyup="sum();">Adult (no change)</option> 
<option value="-4" onkeyup="sum();">Youth (subtract $4)</option> 
</select> 
$<input type="text" id="majors_07" onkeyup="sum()" name="majors_07"/> 
</form> 

Total: $<input type="text" id="result" disabled> Per garment (estimated). 
     </td> 
     <td> 
<div id="large-jersey-box-majors" class="hide_come_back_and_rename"> 
<center><img id="swap" src="http://www.teamworkathletic.com/media/img/product/18/1852B/large-54.jpg" height=300></center> 
</div> 
     </td> 
    </tr> 
<!-- <tr> 
     <td> 
<h2>AAA</h2> 

     </td> 
     <td><div id="large-jersey-box-aaa" class="hide_come_back_and_rename">Jersey Here</div></td> 
    </tr> 
    <tr> 
     <td> 
<h2>AA</h2> 

     </td> 
     <td><div id="large-jersey-box-aa" class="hide_come_back_and_rename">Jersey Here</div></td> 
    </tr>--> 

</table> 

</body> 
</html> 

К сожалению, что-то выключен с кодом, так что не делает функцию переключения изображения совершенно правильный (читай: на всех) в JSFiddle или Plunker, но Plunker подходит ближе, так что я в том числе ссылки к рабочей модели. Если кто-то хочет нанести ему удар и сделать так, чтобы он выглядел хорошо в Plunker или JSFiddle, это было бы оценено и рад.

В любом случае, мне удалось достичь цели заселения цены в текстовом поле И изменить изображение с помощью одного раскрывающегося списка. Я доволен тем, что получил в результате.

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

У меня есть еще одна небольшая проблема, но она отделена от переключения изображений, поэтому я сделаю для нее еще одну запись.