繁体   English   中英

复选框更改功能仅触发一次

[英]Checkbox change function only firing once

确实很糟糕,但是试图提高我的jQuery技能,并为此问题苦苦挣扎。 我有一些从asp.net中继器生成的复选框,我试图强制仅一次选中这些复选框之一。 我可以在jsFiddle上进行此操作,但不能在我的解决方案中使用,任何人都看不到任何错误的内容吗?

的jsfiddle

jQuery的:

$(document).ready(function () {
     $('.menuBox input[type=checkbox]').change(function () {
        $('.menuBox input[type=checkbox]').not(this).prop('checked', false);
    });
});

HTML(由asp.net代码生成):

<div class="menuBox">
   <div class="col1">
    <ul>
        <li id="ctl00_liCategory" class="liCategory">
            <input id="ctl00_chkCategory" type="checkbox" name="ctl00$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'ctl00$chkCategory\',\'\')', 0)" />
            <label for="ctl00_chkCategory" id="ctl00_lblCategory">first label</label>
        </li>
        <li id="ctl01_liCategory" class="liCategory">
            <input id="ctl01_chkCategory" type="checkbox" name="ctl01$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'ctl01$chkCategory\',\'\')', 0)" />
            <label for="ctl01_chkCategory" id="ctl01_lblCategory">second label</label>
        </li>
        <li id="ctl02_liCategory" class="liCategory">
            <input id="ctl02_chkCategory" type="checkbox" name="ctl02$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'ctl02$chkCategory\',\'\')', 0)" />
            <label for="ctl02_chkCategory" id="ctl02_lblCategory">third label</label>
        </li>
    </ul>
   </div>    
</div>

生成html的ASP.NET代码:

<div class="col1">
   <ul>
      <asp:Repeater runat="server" ID="rptrCategoriesCol1"    OnItemDataBound="rptrCategories_ItemDataBound">
         <ItemTemplate>
            <li runat="server" id="liCategory" class="liCategory">
               <asp:Checkbox runat="server" ID="chkCategory" AutoPostBack="true" OnCheckedChanged="FilterResults" CssClass="CategoryChkBox" />
               <asp:Label runat="server" ID="lblCategory" AssociatedControlID="chkCategory" />
            </li>
         </ItemTemplate>
      </asp:Repeater> 
   </ul>
</div>

如果使用中继器,为什么不使用一组单选按钮,因为默认情况下只能选中一个。

您唯一需要做的就是所有输入都具有相同的名称

<input type="radio" name="list1" value="1"/>
<input type="radio" name="list1" value="2"/>
<input type="radio" name="list1" value="3"/>
<input type="radio" name="list1" value="4" />
<input type="radio" name="list1" value="5"/>

http://jsfiddle.net/314jm9oc/

$('.cbox').click(function() {
    $('.cbox').prop("checked",false);
    $(this).prop("checked",true);
});

是复选框问题的简单版本,如果您坚持使用复选框的

$('.menuBox input[type=checkbox]').attr('onclick','');
$('.menuBox input[type=checkbox]').click(function() {   
   $('.menuBox input[type=checkbox]').prop("checked",false);
    $(this).prop("checked",true);
});

将适合您提供的示例。

一段时间未使用.net网络表单。 但是,如果您添加

OnClick="JavaScript:EnableDisable(this);"

到您的复选框

<script type="text/javascript">
function EnableDisable(ele) {
   $('.menuBox input[type=checkbox]').each(function() {
     $(this).prop("checked",false");
   });
   ele.checked = true;
}
</script>

在空白的html上尝试此操作,它应该像在jsFiddle中一样工作

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script>
$(function(){
  $('.menuBox input[type=checkbox]').change(function () {
    $('.menuBox input[type=checkbox]').not(this).prop('checked', false);
  });
}); 
</script>

<div class="menuBox">
<div class="col1">
<ul>
    <li id="content_0_rptrCategoriesCol1_ctl00_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol1_ctl00_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol1$ctl00$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol1$ctl00$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol1_ctl00_chkCategory" id="content_0_rptrCategoriesCol1_ctl00_lblCategory">first label</label>
    </li>
    <li id="content_0_rptrCategoriesCol1_ctl01_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol1_ctl01_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol1$ctl01$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol1$ctl01$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol1_ctl01_chkCategory" id="content_0_rptrCategoriesCol1_ctl01_lblCategory">second label</label>
    </li>
    <li id="content_0_rptrCategoriesCol1_ctl02_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol1_ctl02_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol1$ctl02$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol1$ctl02$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol1_ctl02_chkCategory" id="content_0_rptrCategoriesCol1_ctl02_lblCategory">third label</label>
    </li>
</ul>
</div>
<div class="col2">
<ul>
    <li id="content_0_rptrCategoriesCol2_ctl00_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol2_ctl00_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol2$ctl00$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol2$ctl00$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol2_ctl00_chkCategory" id="content_0_rptrCategoriesCol2_ctl00_lblCategory">fourth label</label>
    </li>
    <li id="content_0_rptrCategoriesCol2_ctl01_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol2_ctl01_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol2$ctl01$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol2$ctl01$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol2_ctl01_chkCategory" id="content_0_rptrCategoriesCol2_ctl01_lblCategory">fifth label</label>
    </li>
</ul>
</div>
<div class="col3">
<ul>
    <li id="content_0_rptrCategoriesCol3_ctl00_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol3_ctl00_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol3$ctl00$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol3$ctl00$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol3_ctl00_chkCategory" id="content_0_rptrCategoriesCol3_ctl00_lblCategory">sixth label</label>
    </li>
    <li id="content_0_rptrCategoriesCol3_ctl01_liCategory" class="liCategory">
        <input id="content_0_rptrCategoriesCol3_ctl01_chkCategory" type="checkbox" name="content_0$rptrCategoriesCol3$ctl01$chkCategory" onclick="javascript:setTimeout('__doPostBack(\'content_0$rptrCategoriesCol3$ctl01$chkCategory\',\'\')', 0)" />
        <label for="content_0_rptrCategoriesCol3_ctl01_chkCategory" id="content_0_rptrCategoriesCol3_ctl01_lblCategory">seventh label</label>
    </li>
 </ul>
</div>

您的代码可在JFiddle上运行,因为自从您将jQuery 1.7.2 Framework&extensions选项设置为以来,它就包含在$(document).ready(...); 声明。 为了使它可以在任何地方工作,您只需自己做一遍:

$(document).ready(function() {
     $('.menuBox input[type=checkbox]').change(function () {
          $('.menuBox input[type=checkbox]').not(this).prop('checked', false);
     });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM