2010-08-19 83 views
0

这个问题主要是在标题中总结出来的。如果display:none,Internet Explorer将不会触发点击功能;

该网站位于:http://tinyurl.com/3abbcsr

我使用的是自定义的无线电/复选框代码accessible_custom_designed_checkbox_radio_button_inputs_styled_css_jquery/

这是其代码的JIST(我修改了它允许定义不同的风格不同标签上的标题

$(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()函数)。

我所做的是将我所有的输入单选按钮设置为display:none。这样用户只需点击该标签,并且秘密地​​点击了一个单选按钮。

如果输入被隐藏,则.click()函数将不会为输入运行。

我认为有两种方式传递这样的:

一个),而不是有无线的。点击()函数触发handlestate,有标签的。点击()函数处理它来代替。这可能无法正常工作,因为那时单选按钮可能实际上没有被点击(这弄乱了我的表单)

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

一个),而不是有无线的 。点击()函数触发 handlestate,有标签的。点击()函数 处理它来代替。这可能 没有工作,虽然正确,因为那时 的单选按钮实际上可能没有 点击(它弄乱了我的形式)

这可能工作的权利,你的标签的。点击()触发也迫使无线电按钮进行检查这样的,

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

为我工作! – 2012-07-20 16:41:00