2010-08-19 2 views
0

Проблема в основном суммируется в заголовке.Internet Explorer не будет запускать функцию щелчка, если дисплей: none;

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

Я использую пользовательский код радио/флажок из accessible_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() не будет работать для ввода, если вход скрыт.

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

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

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

ответ

0

я получил то, что я хотел с:

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

Затем удаляются все onClicks.

1

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

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

$('#radiobutton').attr('checked', 'checked'); 
+0

работал для меня !! –

Смежные вопросы