При изменении событие не распознается?

#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 .