2

我有一个 ASP.NET 呈现的复选框。单击时,我希望 jQuery 捕获事件,但由于某种原因它不起作用。

到目前为止,这就是我正在做的事情:

ASP.NET

<table>
 <tr>
  <td>
   <asp:CheckBox runat="server" ClientIDMode="Static" 
                 id="testcb" name="testcb" />
  </td>
 </tr>
</table>

jQuery

$("#testcb").click(function () {
    if ($(this).is(':checked')) alert("checked");
});

以下是来自浏览器的源代码:

<tr>
 <td>
  <span name="testcb">
   <input id="testcb" type="checkbox" 
          name="ctl00$ctl00$bodyContent$phMainContent$testcb">
  </span>
 </td>
</tr>
4

3 回答 3

4

我相信这个问题很可能是在渲染相关元素之前触发了您的 jQuery 脚本。

尝试以下操作:

<script type="text/javascript">
  $(document).on('ready', function () {
      $("#testcb").on('click', function () {
          var $cb = $(this);
          if ($cb.is(':checked')) {
              alert("checked");
          }
      });
  });
</script>

如果没有该$(document).on('ready' ...部分,则无法保证文档在.click()绑定之前在浏览器中完全呈现。此外,.on()即使在被调用之前不存在的元素上也应该工作(类似于.live()以前版本的 jQuery 中的旧函数)。

请以这个 jsFiddle为例。

于 2012-11-29T21:43:08.697 回答
2

你可以试试这个:

$(document).ready(function() {
  $("#testcb").click(function(){
    if ($(this).attr("checked") == "checked"){
      alert("checked");
    } else {
      alert("unchecked");
    }
  });
});
于 2012-11-29T20:12:56.147 回答
1

由于 ASP 复选框实际上解析为跨度和输入,您可能想要检查复选框的第一个子项:

$("#testcb").click(function () {
        if ($(this).children(':first').is(':checked')) alert("checked");
 });

编辑:

我通常在复选框的声明中设置一个 onclick,所以我不确定这是否可行,但试试这个:

$("#testcb").children(':first').click(function () {
        alert('fire!');
        if ($(this).is(':checked')) alert("checked");
 });
于 2012-11-29T19:46:23.340 回答