Помогите навесить обработчик
Здравствуйте.
Имеется выпадающее меню на 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, время: 17:18. |