有很多问题:
-
chk.id 将是一个字符串,但 $("#R1") 将是一个 jquery 对象 - 它们永远不会相同。
-
ID="R1" runat="server" 表示 id 不会是 R1,因为 asp.net “有用地”尝试通过添加上下文来使 ID 唯一。
所以
-
$("#R1").length 将始终 ==0,因为 asp.net 已为您破坏了您的 ID=(再次“有帮助”)。
这已在 OP 评论中得到确认 它显示 "Hi contentBody_R1"
-
alert("Hi R1") 将 永远 提供 "Hi contentBody_R1" - 所以这不是 OP 正在运行的代码,可能它们正在运行 alert("Hi " + chk.id)
所以你不能使用$("#R1"),除非你使用$("#contentBody_R1")的完整ID - 然后假设你不会将它移动到不同的内容中以获得不同的id
最简单的选择是在通话中传递您想要的信息,例如:
<asp:CheckBox ID="R1" runat="server" AutoPostBack="True" OnClick="return Discount(this, 15.0);"/>
<asp:CheckBox ID="R2" runat="server" AutoPostBack="True" OnClick="return Discount(this, 17.5);"/>
function Discount(chk, discount) {
或将信息存储在复选框上(如果使用服务器端控件,可能需要做一些额外的工作,但对于输入来说是这样):
<input type="checkbox" id="r1" data-discount="15" onclick="return Discount(this);">
<input type="checkbox" id="r2" data-discount="17.5" onclick="return Discount(this);">
function Discount(chk) {
var discount = $(chk).data("discount") * 1.0;
另一种选择,除非您真的需要在复选框上自动回发(提示:您可能不需要)是使用 HTML 而不是服务器端控件,即:
<input type="checkbox" id="r1" data-discount="15" onclick="return Discount(this);">
<input type="checkbox" id="r2" data-discount="17.5" onclick="return Discount(this);">
function Discount(chk) {
if (chk.id == "r1")
在这种情况下,您可以使用chk.id == $("#r1").attr("id"),但如果您通过id 查找,那么您已经知道id,因此无需查找。