Internet Explorer не будет активировать функцию щелчка, если отображается: нет; - PullRequest
0 голосов
/ 19 августа 2010

Проблема в основном обозначена в заголовке.

Сайт находится здесь: http://tinyurl.com/3abbcsr

Я использую пользовательский код радио / флажка из available_custom_designed_checkbox_radio_button_inputs_styled_css_jquery /

Это код их кода ( Я изменил его, чтобы позволить определять другой стиль в зависимости от заголовка метки )

$(this).each(function(i){   
        if($(this).is('[type=radio]')){
            var input = $(this);

            // get the associated label using the input's id
            var label = $('label[for='+input.attr('id')+']');


            var labelTitle = label.attr('title');

            // wrap the input + label in a div that has class "custom-radio-LabelTitle"
            $('<div class="custom-radio-' + labelTitle + '"></div>').insertBefore(input).append(input, label);


            // find all inputs in this set using the shared name attribute
            var allInputs = $('input[name='+input.attr('name')+']');


            //bind custom event, trigger it, bind click,focus,blur events                   
            input.bind('updateState', function(){   
                if (input.is(':checked')) {
                    if (input.is(':radio')) {               
                        allInputs.each(function(){
                            $('label[for='+$(this).attr('id')+']').removeClass('checked');
                        });     
                    };
                    label.addClass('checked');
                }
                else { label.removeClass('checked checkedHover checkedFocus'); }

            })
            .trigger('updateState')
            .click(function(){ 
                $(this).trigger('updateState'); 
            })
        }
    });

Насколько я понимаю, их код в основном находит все радиовходы, а затем определяет специальный триггер, называемый updateState . Затем они запускают его внутри функции щелчка входа.

Таким образом, каждый раз при щелчке по входной радиокнопке updateState является триггером, который, в свою очередь, устанавливает класс для метки этой радиокнопки. Изменение класса изменяет CSS метки.

При щелчке по метке также выбирается вход, для которого эта метка (запускается функция JQuery .click ()).

Я установил все мои входные радиокнопки на дисплей: нет . Таким образом, пользователь только нажимает на ярлык, и тайно он нажимает переключатель.

.click () не будет работать для ввода, если вход скрыт.

Я предполагаю, что есть два способа пройти это:

a) вместо того, чтобы функция радио .click () вызывала ручное состояние, функция метки .click () обрабатывает его. Хотя это может не сработать, потому что тогда кнопка переключателя не может быть нажата (что портит мою форму)

b) при нажатии на метку, активируйте функцию щелчка радио вручную. Однако это может привести к тому, что он будет запущен дважды в каждом браузере, кроме IE. Я не знаю, как обратиться к радио лейбла и не дать ему дважды сработать.

Ответы [ 2 ]

1 голос
/ 19 августа 2010

а) вместо радио Функция .click () запускает handlestate, иметь метку .click () функция обрабатывает это вместо. Это может не работает правильно, хотя, потому что тогда радио-кнопка на самом деле не может быть нажал (что портит мою форму)

Это может сработать правильно, на триггере ярлыка .click () также принудительно устанавливается переключатель, например,

$('#radiobutton').attr('checked', 'checked');
0 голосов
/ 19 августа 2010

Я получил то, что хотел:

$("label[title='Plan']").click(function() {
    var id = $(this).attr('for')
    $("input[id='"+id+"']").trigger("click");
    $("input[id='"+id+"']").trigger("updateState");
    PlanChange();
});

Затем удалил все клики.

...