Помогите навесить обработчик
Здравствуйте.
Имеется выпадающее меню на javascript со сменным background. Не удается навесить обработчик onchange. <select class="kuk" > <option value="1">Русский</option> <option value="2">France</option> </select> фрагмент скрипта function srReplaceSelects() { /* var s = document.getElementsByTagName('select');*/ var s = $('select.kuk'); var len = s.length for (var i = 0; i < len; i++) rsSelectReplace(s[i]); srAddEvent(document, 'click', srOnDocumentClick); } function rsSelectReplace(sel) { var ie6 = (navigator.userAgent.search('MSIE 6.0') != -1); var ul = document.createElement('ul'); if (!ie6) { ul.className = 'srList'; } else { ul.className = 'srList2'; } ul.className += ' srCollapsed'; ul.className += ' srBlur'; ul.srSelect = sel; sel.srReplacement = ul; sel.className += ' srReplacedSelect'; sel.onfocus = function() { this.srReplacement.className = this.srReplacement.className.replace(/[\s]?srBlur/, ' srFocus'); } sel.onblur = function() { this.srReplacement.className = this.srReplacement.className.replace(/[\s]?srFocus/, ' srBlur'); } sel.onchange = function() { alert("ch"); var ul = this.srReplacement; ul.srSelectLi(ul.childNodes[this.selectedIndex]); } ... функция sel.onchange = function() не работает $('select.kuk').onchange(function(){alert('xxx'); }); - так тоже нет |
Если я правильно понял - вы пользуетесь jQuery - в ней событие onchange называется просто change, то есть код должен быть примерно таким
$('select.kuk').change(function(){alert('xxx'); }); |
Цитата:
Спасибо за подсказку насчет change. Исправил- $('select.kuk').change(function(){alert('xxx'); }); Для появления на экране сообщения 'xxx' достаточно изменять выбор в списке или еще необходим вызов change в коде? |
Цитата:
|
Цитата:
Сообщение появляется один раз при загрузке страницы. |
Ошибся, сообщений вообще нет.
|
Сообщения появляются только при изменении с клавиатуры,
при изменении мышкой- сообщений нет. |
Цитата:
|
Цитата:
Если отключить javascript- для стандартного <select> change работает как надо. Если навешиваю javascript + jquery и добавляю ul-li список картинок, change перестает работать с мышки. |
Цитата:
|
Цитата:
Могу показать лишь код. |
Цитата:
|
function srOnDocumentClick(e) { var target = (window.event) ? window.event.srcElement : e.target; if(document.srExpandedList) { if((target.srIndex || target.srIndex === 0) && document.srExpandedList == target.parentNode ) document.srExpandedList.srCollapse(target); else document.srExpandedList.srCollapse(); switch ($('select.kuk').val()) { case '1': $('ul.srBlur').css({background:"url('css/jaz/selectbg.png') "} ); $('ul.srFocus').css({background:"url('css/jaz/selectbg.png') "} ); break; case '2': $('ul.srFocus').css({background:"url('css/jaz/sbgfr.png')"} ); $('ul.srBlur').css({background:"url('css/jaz/sbgfr.png')"} ); break; } } else { if(target.srIndex || target.srIndex === 0) target.parentNode.srExpand(); } } function srReplaceSelects() { var s = $('select.kuk'); var len = s.length for (var i = 0; i < len; i++) rsSelectReplace(s[i]); srAddEvent(document, 'click', srOnDocumentClick); } srAddEvent(window, 'load', srReplaceSelects); вот часть кода с обработчиком click |
Скрипт, которым Вы пользуетесь действительно ограниченный. Удивительно, что автор не предусмотрел элементарные вещи связанные с событиями.. Я поступил весьма прозаично в аналогичном случае:
в самом скрипте дописал две строки //устанавливаем для выбранного элемента //класс srSelectedLi ul.childNodes[li.srIndex].className = 'srSelectedLi'; if(window.srSelectCallBack)srSelectCallBack(ul.srSelect, li.srValue); // добавленная строка //в каждом элементе списка //храним индекс соответствующего //элемента option li.srIndex = i; li.srValue=options[i].value; // добавленная строка Ну и при необходимости уже в собственном коде определяем обработчик и получаем нужный функционал: function srSelectCallBack(oSelect,xValue){ console.log($(oSelect).val()); } // srSelectCallBack |
Решение RobertoCavali работает, но почему-то срабатывает со 2-го раза.
Сразу при загрузке страницы и при выборе любого элемента списка берёт значение всё-ранво из первого элемента option. Т.е. приходится выбирать 2 раза чтобы выбрать то что нужно. Почему так происходит? |
Часовой пояс GMT +3, время: 04:29. |