0

チェックボックスをクリックすると、関連付けられているラベル テキストが 2 倍になる理由がわかりません。誰でも私を助けることができますか?

// 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>
4

2 に答える 2

1

私は実際に何をしているのかわかりませんが、クリックハンドラーではなく、ドキュメントの準備ができている場所に配置する必要があるとDcustomInput推測できます$('.ck,.chkbox,.checkAll ,input:radio').DcustomInput();

于 2012-06-04T15:27:18.310 に答える
0

わかりました。解決策を見つけました。次の2行にコメントしてください。

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

古いラベルが非表示にならないようにし、入力と古いラベルを複製しようとしないようにします。

于 2012-06-04T15:37:01.350 に答える