2012-11-29 38 views
2

我有一个ASP.NET呈现的CheckBox。点击时,我希望jQuery捕获事件,但由于某种原因,它不起作用。<asp:Checkbox>的jQuery click()事件没有触发

这是我在做什么至今:

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> 
+0

你使用的是什么版本的jQuery?该代码似乎对我来说非常合适。请参阅以下jsFiddle:http://jsfiddle.net/TroyAlford/9za2p/0/ –

+0

1.9.1和1.9.2(jquery-ui) – SkyeBoniwell

+0

请查看您的代码生成的HTML,然后更新您的答案包括那个。 –

回答

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()应该可以在调用之前不存在的元素上工作(类似于以前版本jQuery中的旧.live()函数)。

请参阅this jsFiddle为例。

+0

完美运作!你怎么解决这个问题的?我花了太多时间试图让这个工作。谢谢! :) – SkyeBoniwell

+1

大声笑 - 我已经做了完全相同的事情 - 万一次。 :)几小时后,我突然想起,和/ facepalm。 :)很高兴它解决了这个问题。 –

+0

谢谢,工作完美:) –

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"); 
}); 
+0

感谢您的代码,我看到您在说什么,并且我进行了更改,但是当我单击复选框时,它仍然没有任何作用。 – SkyeBoniwell

2

你可以试试这个:

$(document).ready(function() { 
    $("#testcb").click(function(){ 
    if ($(this).attr("checked") == "checked"){ 
     alert("checked"); 
    } else { 
     alert("unchecked"); 
    } 
    }); 
}); 
+0

我明白if/else ...很好的补充。但由于某种原因,单击复选框时没有任何事情发生。 – SkyeBoniwell