开发者

Jquery - checkbox label click not working

Here is the HTML Sample dynamically generated from c#.net:-

<ul class="multiselect-checkboxes clearfix horizontal" id="chkMC"><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices0-931336440" id="ctl03_ctl05_CheckboxChoices0-931336440"><label for="ctl03_ctl05_CheckboxChoices0-931336440">1-2 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices1-1671570667" id="ctl03_ctl05_CheckboxChoices1-1671570667"><label for="ctl03_ctl05_CheckboxChoices1-1671570667">5-10 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices2679786207" id="ctl03_ctl05_CheckboxChoices2679786207"><label for="ctl03_ctl05_CheckboxChoices2679786207">10-12 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices3-977631492" id="ctl03_ctl05_CheckboxChoices3-977631492"><label for="ctl03_ctl05_CheckboxChoices3-977631492">12-15 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices41547758987" id="ctl03_ctl05_CheckboxChoices41547758987"><label for="ctl03_ctl05_CheckboxChoices41547758987">15-20 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices5-1658326960" id="ctl03_ctl05_CheckboxChoices5-1658326960"><label for="ctl03_ctl05_CheckboxChoices5-1658326960">20-21 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices6-100787876" id="ctl03_ctl05_CheckboxChoices6-100787876"><label for="ctl03_ctl05_CheckboxChoices6-100787876">22-23 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices7122075492" id="ctl03_ctl05_CheckboxChoices7122075492"><label for="ctl03_ctl05_CheckboxChoices7122075492">23-24 Years</label></span></li><li onclick="setMcCb(event);"><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoices8-1742375481" id="ctl03_ctl05_CheckboxChoices8-1742375481"><label for="ctl03_ctl05_CheckboxChoices8-1742375481">More than that</label></span></li><li><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoicesOther" id="ctl03_ctl05_CheckboxChoicesOther"><label for="ctl03_ctl05_CheckboxChoicesOther">other</label></span>&nbsp;&nbsp;<input type="text" style="width: 150px;" class="QTextBox" id="ctl03_ctl05_otherText" name="ctl03$ctl05$otherText"></li><li><span class="QRadio"><input type="checkbox" name="ctl03$ctl05$CheckboxChoicesNA" id="ctl03_ctl05_CheckboxChoicesNA"><label for="ctl03_ctl05_CheckboxChoicesNA">plplpl</label></span></li></ul>

JS Method:-

function setMcCb(e) {  
                if (!e) var e = window.event;                             
                var tg = (window.event) ? e.srcElement : e.target;  //FF & IE.
                var j$chk = j$(tg).closest('li').find(':checkbox');

                if ( j$chk[0] != tg)                        
                    j$chk.attr('checked', !j$chk.attr('checked'));
                }

*Purpose of the JS Method:- I created this javascript when anyone clicks the checkbox, label or the li tag, the checkbox should toggle. *

*My Problem:- When i click the label element, the js is not working. The toggle is not happening. Please help me refine the js code. *

I made it work the following code:-

 if (!e) var e = window.event;                             
                    var tg = (window.event) ? e.srcElement : e.target;  //FF & IE.                    
                    //Label click does not toggle the cbx with this JS, so the below processing is skipped by returning false.
                    if (tg.tagName.toUpperCase() == 'LABEL')
                        return false;

                    var j$chk = j$(tg).closest('li').find(':checkbox');
                    if ( j$chk[0] != tg){                        
                         if(j$chk.attr('checked'))
                            j$chk.removeAttr('checked');
                         else 
   开发者_如何学C                         j$chk.attr('checked', 'checked');
                        }


Your problem is in the following line

j$chk.attr('checked', !j$chk.attr('checked'));

The call to !j$chk.attr('checked') will return a boolean value, which you're then assigning to checked. You should try:

if(j$chk.attr('checked')) {
  j$chk.removeAttr('checked');
} else {
  j$chk.attr('checked', 'checked');
}


Instead try

 if ( j$chk[0] != tg)    
     if(!j$chk.attr('checked')){
         j$chk.attr('checked', 'checked');
     }else {
         j$chk.removeAttr('checked');
     }
 }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜