如何在JQuery内部检查哪个控件触发了它

如何在JQuery内部检查哪个控件触发了它,jquery,asp.net,Jquery,Asp.net,假设两个asp.net控件触发相同的JQuery函数。 我们如何在JQuery中检查哪个控件触发了它: asp.net <asp:CheckBox ID="R1" runat="server" AutoPostBack="True" OnClick="return Discount(this);"/> <asp:CheckBox ID="R2" runat="serve

假设两个
asp.net
控件触发相同的
JQuery
函数。 我们如何在
JQuery
中检查哪个控件触发了它:

asp.net

<asp:CheckBox ID="R1" runat="server" AutoPostBack="True" OnClick="return Discount(this);"/>
<asp:CheckBox ID="R2" runat="server" AutoPostBack="True" OnClick="return Discount(this);"/>

你的测试是错误的,你必须这样写:

   function Discount(chk) {
      $(function () {
        if ( chk.id== "R1") 
          alert("Hi R1");
    
        if (chk.id == 'R2') 
          alert("Hi R2");
       });    
      }
您可以在不使用if语句的情况下简化:

   function Discount(chk) {
      $(function () {
          alert("Hi " + chk.id);
       });    
      }

有许多问题:

  • chk.id
    将是一个字符串,但
    $(“#R1”)
    将是一个jquery对象-它们将永远不一样
  • ID=“R1”runat=“server”
    意味着
    ID
    将不会是
    R1
    ,因为asp.net“有益地”尝试通过添加上下文使ID唯一
所以

  • $(“#R1”).length
    将始终==0,因为asp.net已为您断开ID=(再次“有益”)
这在OPs注释中得到确认,它显示了“Hi contentBody_R1”

  • 警报(“Hi R1”)
    永远不会提供
    “Hi contentBody\u R1”
    -因此这不是OP正在运行的代码,很可能他们正在运行
    警报(“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);"/>
或者将信息存储在复选框中(如果使用服务器端控件,可能需要一些额外的工作,但对于输入,则需要):

另一种选择是使用HTML而不是服务器端控件,除非您真的需要在复选框上自动回写(提示:您可能不需要这样做),即:


在这种情况下,您可以使用
chk.id=$(“#r1”).attr(“id”)
,但是如果您是通过
id
查找的,那么您已经知道
id
,因此不需要查找。

什么都没有发生。如果我删除“if statemnet”,它会显示“Hi contentBody_R1”和“Hi contentBody_R2”,这很正常,我不明白,你想删除if吗?你想做什么1.不清楚。如果。。我只是告诉你打印的是什么用法:
alert(chk.id)
(在原始代码中)
chk.id!=“R1”
(或“R2”)因为asp.net会用您的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;
<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")