2010-05-27 5 views
1

Я хочу использовать раскрывающийся список, каждый раз, когда я нажимаю на него содержимое, появляются разные картинки. Но я не хочу использовать свойство «value», потому что я хочу использовать значения для другого использования.Как изменить изображение с помощью выпадающего списка?

Пример:

<select name='test'> 
<option value='1'>1</option> 
<option value='2'>2</option> 
<option value='3'>3</option> 
<option value='4'>4</option> 
</select> 

Как я выполнить это?

Спасибо.

Edit:

с предложением заостренный, он работает.

<select name="dpt" onChange="picture.src=this.options[this.selectedIndex].getAttribute('data-whichPicture');" > 
<option value="1839" data-whichPicture='./imgs/t1.jpg' >01</option> 
<option value="1661" data-whichPicture='./imgs/t2.png' >02</option> 
</select> 
</select> 
<img src='' id='picture' /> 

Edit:

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

+0

Вы должны использовать кронштейн обозначение для обозначения свойств с помощью специального символа в JavaScript: 'this.options [ this.selectedIndex] ["data-whichPicture"] ' См .: http://www.dev-archive.net/articles/js-dot-notation/ – RoToRa

+0

Я пробовал ваше предложение, оно не работает. –

ответ

2

Вы можете использовать «класс» каждого параметра, чтобы удерживать индикатор того изображения. Если вы пишете в HTML5, как и все красивые люди в наше время, вы можете использовать «данные» атрибут:

<option value='1' data-whichPicture='http://whatever.com/picture_017.jpg'>1</option> 

Вы можете фактически придерживаться любого атрибута вы хотите на тегах, но это будет оставить страницы в недействительном состоянии. Атрибуты HTML5 еще не проверены (я не думаю, что последний проверщик HTML5, который я пробовал, был довольно изворотливым), но W3C обещает, что они когда-нибудь появятся.

редактировать — также - ваш вопрос указывает, что вы хотите изменить изображения, когда кто-то «щелкает» на <select>. Фактически вы можете получать «щелчки» из каждого <option>, но вам, вероятно, также следует следить за событиями «изменения». Пользователи могут вставлять в ваш <select> и использовать клавиши со стрелками вверх и вниз для изменения выбора. Вы не получите событие «change», пока пользователь не выберет <select> или не щелкнет где-нибудь еще. (Это можно было бы получить «» события нажатия клавиш, я не пробовал это, но я только мог бы ...)

редактировать — Чтобы получить атрибуты (если вы используете «DATA-» трюк), вы должны использовать метод «GetAttribute» на элементах:

var whichPicture = sel.options[sel.selectedIndex].getAttribute('data-whichPicture'); 
+0

С уважением, это применимо в приложениях прямо сейчас? Я попытался использовать его, но он не отображает изображение. –

+0

Э-э ... Я не уверен, что вы имеете в виду. Возможно, если бы вы разместили больше своего кода, это поможет. – Pointy

+0

Я обновил сообщение, вы можете проверить его? –

1

вы можете настроить отображение между значениями опций и изображениями

{ 1: "imgA.png", 2: "imgB.png" } 

, а затем использовать функцию, чтобы загрузить правильный образ основанный на этом сопоставлении.

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

<select name='test'> 
<option value='1;imgA.png'>1</option> 
<option value='2;imgB.png'>2</option> 
</select> 

И затем использовать строковые функции разобрать числовое значение или имя изображения в соответствии с требованиями.

+0

Карта или ассоциативный массив действительно лучший и надежный способ сделать это, imo. –

0

Вы можете поместить несколько значений в поле «значение», разделив их на разделители. Вы должны разделить значение и выбрать тот, который вы хотите использовать при отображении изображения

<option value="1,dogs.jpg">1</option> 
<option value="2,hogs.jpg">2</option> 
<option value="3,cats.jpg">3</option> 
<option value="4,dogs.jpg">4</option> 
+0

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

+0

Как использовать второй параметр в свойстве 'значение'? –

+0

Зависит от того, где вы используете значение ... в Javascript или C#. В JavaScript, вы должны разделить значение в массив подстрок, затем выберите второй элемент массива, который создан: http://www.tizag.com/javascriptT/javascript-string-split.php В C# такая же идея ... используйте метод разделения по строкам: http://dotnetperls.com/string-split затем выберите второй элемент в массиве. –

Смежные вопросы