#jquery
#jquery
Вопрос:
У меня есть этот код, который ищет событие onchange:
//Create destination switch
$('#regionselect').change(function(){
var selected = $(this).find(':selected');
$('.optionvalue').fadeOut(function(){
$('.optionvalue').html(selected.html()).fadeIn()
.attr('class', 'optionvalue ' selected.val());
});
var count = $('.countrylist').length;
$('.countrylist').slideUp(function(){
if(!--count) {
$('.' selected.val()).slideDown();
}
});
});
Здесь это работает отлично:
http://jsfiddle.net/XfPv7/1 /
Кто-нибудь может помочь?
Комментарии:
1. Идея заключается в том, что при выборе выпадающего списка он показывает относительные скрытые разделы в пунктах назначения.
2. На самом деле вы не используете
#regionselect
элемент. В документ вставляется приукрашенный выпадающий список (#sarea8
), который при этом#regionselect
смещен на 300 пикселей влево.3. Как я мог заставить код запускаться, когда это изменилось?
Ответ №1:
//This worked for me - I appear to have inherited similar jquery custom select code
function onChange()
{
var el=document.getElementById("selectid");
//el.options[] is your array of options
if (el.options[0].selected==true)
//Some code
}
Ответ №2:
Ваша реальная проблема заключается в следующем:
http://www.thestc.co.uk/assets/js/form.js
Найденные здесь сценарии включают функции populateSelectOptions()
, selectMe()
, showOptions()
, которые вместе служат для отключения вашего реального обработчика событий select onChange, поскольку вы вообще не взаимодействуете с вашим реальным select.
Если вы отключите сценарии выбора замены, все будет работать нормально. Смотрите: http://jfcoder.com/test/customselect.html
Редактировать
Вот своего рода способ грубой силы устранить проблему.
function setDestOpts(dest) {
reg = $('#regionselect');
reg.val(dest);
reg.trigger('change');
$('#optionsDiv8').removeClass('optionsDivVisible').addClass('optionsDivInvisible');
}
var checkDest = function() {
if ($('#optionsDiv8').length == 0) return;
clearInterval(destinterval);
c_opt = 0;
$('#optionsDiv8 ul li a').each(function(c_opt){
reg = $('#regionselect option');
href = "javascript:setDestOpts('" reg.eq(c_opt).val() "');";
$(this).attr('href', href);
c_opt ;
});
}
var destinterval = setInterval(function(){checkDest()}, 500);
http://jfcoder.com/test/customselect.html
Все, что это делает, это изменяет Javascript, введенный в A.HREF, что является основной проблемой. Это имитирует изменение значения, а затем запускает событие onChange.
Обратите внимание, по какой-то причине jQuery не загружается при каждой загрузке страницы по этой ссылке на моем сайте, поэтому, если это не сработает с первого раза, перезагрузите страницу после ее полной загрузки.
Комментарии:
1. Есть ли способ использовать оба? Я действительно хочу сохранить стиль
2. Не без полного переписывания ваших скриптов, чтобы обеспечить другую функциональность.
3. @Andy — Смотрите мою правку, чтобы обойти проблему. Обратите внимание, интервал необходим, потому что повтор должен произойти после запуска других скриптов, которые происходят примерно через 3-5 секунд после загрузки страницы.
4. выполняется ли это в основном jquery js?
5. @Andy — Просмотрите исходный код страницы на моем сайте. Я поместил его в заголовок файла, но его просто нужно включить куда-нибудь, где он будет запускаться при загрузке страницы.
Ответ №3:
В скрипте, которую вы используете select
на «живом» сайте, вы используете какой-то пользовательский select
(div)
$('.outtaHere ul li a').click(function() {
// do you stuff to show the elements
});
Я не знаю, можете ли вы изменить код пользовательского выбора, но было бы намного чище удалить встроенный код javascript.
Комментарии:
1. Даже если я изменю его на div, это не будет иметь никакого значения : (
2. Возможно, вы можете настроить fiddle с точно таким же кодом, чтобы я мог это исправить там?
3. Это действительно работает: jsfiddle.net/XfPv7/3 То же самое сделал бы @Andy, опубликованный выше, если бы идентификатор был
#regionselect
.