简体   繁体   English

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

[英]Checkbox change function only firing once

Admittedly awful but trying to improve my jQuery skills and struggling with this issue. 确实很糟糕,但是试图提高我的jQuery技能,并为此问题苦苦挣扎。 I have a few checkboxes that are being generated from an asp.net repeater, I'm trying to enforce only having one of these checkboxes checked at a time. 我有一些从asp.net中继器生成的复选框,我试图强制仅一次选中这些复选框之一。 I can get this working on jsFiddle but not in my solution, can anyone see anything that sticks out as being wrong? 我可以在jsFiddle上进行此操作,但不能在我的解决方案中使用,任何人都看不到任何错误的内容吗?

JSFiddle 的jsfiddle

jQuery: jQuery的:

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

HTML (generated by asp.net code): 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>

ASP.NET code generating the html: 生成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>

If you are using a repeater, why not use a set of radio buttons instead, as you can only have one checked by default. 如果使用中继器,为什么不使用一组单选按钮,因为默认情况下只能选中一个。

The only thing you will need is all of the inputs to have the same name 您唯一需要做的就是所有输入都具有相同的名称

<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/ http://jsfiddle.net/314jm9oc/

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

Is a simple version of your checkbox issue, if you stick with checkbox's 是复选框问题的简单版本,如果您坚持使用复选框的

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

Will fit your provided example. 将适合您提供的示例。

Haven't used .net webforms in a while. 一段时间未使用.net网络表单。 But if you add 但是,如果您添加

OnClick="JavaScript:EnableDisable(this);"

To your checkbox's 到您的复选框

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

Try this on the blank html and it should work just like in jsFiddle 在空白的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>

Your code works on JFiddle because, since you set Framework & extensions option to jQuery 1.7.2 , it's included inside a $(document).ready(...); 您的代码可在JFiddle上运行,因为自从您将jQuery 1.7.2 Framework&extensions选项设置为以来,它就包含在$(document).ready(...); statement. 声明。 In order it to work everywhere you only have to do the same on your own: 为了使它可以在任何地方工作,您只需自己做一遍:

$(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