代码之家  ›  专栏  ›  技术社区  ›  Karan

jquery-复选框标签单击不工作

  •  0
  • Karan  · 技术社区  · 15 年前

    以下是从C.NET动态生成的HTML示例:

    <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方法:

    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'));
                    }
    

    * JS方法的目的: 我创建了这个javascript,当任何人单击复选框、标签或li标记时,该复选框应该切换。*

    * 我的问题是:当我单击标签元素时,JS不工作。切换未发生。请帮助我完善JS代码。*

    我让它按以下代码工作:

     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 
                                j$chk.attr('checked', 'checked');
                            }
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   EMMERICH    15 年前

    你的问题在下面一行

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

    呼唤 !j$chk.attr('checked') 将返回一个布尔值,然后将其分配给选中的。你应该尝试:

    if(j$chk.attr('checked')) {
      j$chk.removeAttr('checked');
    } else {
      j$chk.attr('checked', 'checked');
    }
    
        2
  •  1
  •   Chinmayee G    15 年前

    相反尝试

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