Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2010, 19:42
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Меню из select-а
Здравствуйте. Есть такой элемент навигации реализованный с помощью JS:

<html>
<head>
<script>
function formHandler(form){
var URL = document.form.site.options[document.form.site.selectedIndex].value;
window.location.href = URL;}
</script>
</head>

<body>
<form name='form'>
<select name="site" size=1 onChange="javascript:formHandler()">
<option>Выбрать
<option value="1.html">1
<option value="2.html">2
<option value="3.html">3
</select>
</form>
</body>
</html>


Подскажите пожалуйста, как сделать сам скрипт, независимым от меню, т.е. чтоб при создании более чем одного меню на странице все они работали и не приходилось писать для каждого отдельный скрипт с абсолютной адресацией.
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2010, 20:07
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

(function () {
	var nodes = document.querySelectorAll ? document.querySelectorAll( 'SELECT.nav' ) : document.getElementsByTagName( 'SELECT' ),
	len = nodes.length;
	for ( var i = 0; i < len; i++ ) {
		if ( nodes[i].className == 'nav' ) {
			nodes[i].onchange = function () {
				location.href = this.value;
			}
		}
	}
})();


Нужным селектам присвоить класс nav.

Данный скрипт будет работать некорректно, если:

1. У селекта несколько классов.
2. У селекта назначит обработчик change.

Если нужен более универсальный вариант — пишите, сделаем.
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2010, 20:35
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Да желательно чтоб был универсальный, а этот вариант кроссбраузерный?
Класс это имя элемента?
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2010, 20:41
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Цитата:
а этот вариант кроссбраузерный?
Да.

Цитата:
Класс это имя элемента?
class="nav"

Цитата:
Да желательно чтоб был универсальный
(function () {
	function redirect() {
		location.href = this.value;
	}
	var nodes = document.querySelectorAll ? document.querySelectorAll( 'SELECT.nav' ) : document.getElementsByTagName( 'SELECT' ),
	len = nodes.length;
	for ( var i = 0; i < len; i++ ) {
		if ( /\bnav\b/.test( nodes[i].className ) {
			if ( nodes[i].addEventListener ) {
				nodes[i].addEventListener( 'change', redirect, false );
			} else if ( nodes[i].attachEvent ) {
				nodes[i].attachEvent( 'onchange', function () {
					redirect.call( nodes[i] );
				} );
			} else {
				nodes[i].onchange = redirect;
			}
		}
	}
})();

Последний раз редактировалось exec, 13.08.2010 в 20:46.
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2010, 20:47
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

а можно использовать id, а не class?
А какой обработчик использовать у селекта если onChange нельзя?
Ответить с цитированием
  #6 (permalink)  
Старый 13.08.2010, 20:51
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Цитата:
а можно использовать id, а не class?
Нет, ID всегда один на страницу.

Цитата:
А какой обработчик использовать у селекта если onChange нельзя?
Можно. Просто если поставить onchange = handler, то старый onchange затрётся (если он был). Добавление обработчика через addEventListener/attachEvent решает эту проблему.
Ответить с цитированием
  #7 (permalink)  
Старый 15.08.2010, 08:57
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

exec, я нашел вот такой более компактный вариант:

<select onChange="location = this.value;">
<option value="">Выберите
<option value="1.html">111
<option value="2.html">222
<option value="3.html">333
</select>


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

Последний раз редактировалось LRCenter, 15.08.2010 в 09:16.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Находится ли мышка над дивом ? (выпадающее меню) advsm jQuery 31 24.09.2014 17:50
Ищу jQuery плагин для создания меню Zeboton jQuery 9 15.09.2014 15:31
Помогите создать тройное select меню JuriySOFT Элементы интерфейса 12 14.06.2010 14:33
Как "переключать" картинки в меню навигации? KirTer Элементы интерфейса 1 22.06.2009 11:49
Событие mouseout при наведении мыши на пункт меню WalterScott Events/DOM/Window 2 12.05.2009 22:05