2012-06-04 2 views
0

Я не знаю, почему при щелчке по флажку он удваивает соответствующий текст ярлыка. Может ли кто-нибудь мне помочь?Флажок Div двойной ярлык?

// add multiple select/deselect functionality 
       $("#selectall").click(function() { 
        $('.child').attr('checked', this.checked); 
        $('.ck,.chkbox,.checkAll ,input:radio').DcustomInput(); 
       }); 

jQuery.fn.DcustomInput = function(){ 
        $(this).each(function(i){ 
         if($(this).is('[type=checkbox],[type=radio]')){ 
          var input = $(this); 
          var id=input.attr('id'); 


         // get the associated label using the input's id 
         var forlabel = $('label[for='+input.attr('id')+']'); 
         var chklabel = forlabel.text(); 
         forlabel.hide(); 
         var label = $("<label for='"+id+"' class='checker'>"+chklabel+"</label>"); 

         //get type, for classname suffix 
         var inputType = (input.is('[type=checkbox]')) ? 'checkbox' : 'radio'; 
         // alert(label); 
         // wrap the input + label in a div 
         $('<div class="custom-'+ inputType +'"></div>').insertBefore(input).append(input, label); 

         // find all inputs in this set using the shared name attribute 

         if(input.is(':disabled')){ 
          if(inputType == 'checkbox' && input.is(':checked')){ 
           label.addClass(' checkedDisabled '); 
          } else{ 
           label.addClass(' disabled '); 
          } 
         } 

         // necessary for browsers that don't support the :hover pseudo class on labels 
         label.hover(
         function(){ 
          if(!input.is(':disabled')){ 
           $(this).addClass('hover'); 
          } 
          if(inputType == 'checkbox' && input.is(':checked') && !input.is(':disabled')){ 
           $(this).addClass('checkedHover'); 
          } 
         }, 
         function(){ $(this).removeClass('hover checkedHover focus'); } 
        ); 

         //bind custom event, trigger it, bind click,focus,blur events     
         input.bind('updateState', function(){ 
          if (input.is(':checked') && !input.is(':disabled')) { 
           if (input.is(':radio')) { 
            var allInputs = $('input[name='+input.attr('name')+']'); 
            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'); 
         }) 
         .focus(function(){ 
          label.addClass('focus'); 
          if(inputType == 'checkbox' && input.is(':checked')){ 
           $(this).addClass('checkedFocus'); 
          } 
         }) 
         .blur(function(){ label.removeClass('focus checkedFocus'); }); 
        } 
       }); 
      }; 
     </script> 
+0

Можете вы добавить HTML, чтобы пойти с ним, пожалуйста. – dotty

+0

Можете ли вы указать на часть кода, где метка может быть изменена? – Amberlamps

+0

У меня есть 1 флажок с именем «selectall», чтобы обрабатывать все остальные флажки класса «child». Но мой шаблон идет с дополнительным jquery вроде этого – Silentbang

ответ

0

нормально, я нашел решение, просто комментарий эти 2 строки:

forlabel.hide(); 
$('<div class="custom-'+ inputType +'"></div>').insertBefore(input).append(input, label); 

так, что старый лейбл не скрыт, и мы не будем пытаться дублировать ввод и старую этикетку.

1

Я на самом деле не знает, что делает DcustomInput, но я мог бы предположить, что $('.ck,.chkbox,.checkAll ,input:radio').DcustomInput(); должны быть помещены на документе готов и не на клик обработчика

+0

да. customInput() уже был вставлен в документ. Я пытаюсь скопировать в DcustomInput(), чтобы изменить его, чтобы он не удваивал метку – Silentbang

+0

@silentbang: извините, но я не понимаю, что вы имеете в виду. Вы уже поместили код, который я заметил на документе, готовы и удалили его из обработчика кликов? –

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