【问题标题】:How to Check inside JQuery which control has trigger it如何在 JQuery 内部检查哪个控件触发了它
【发布时间】:2021-07-06 15:01:43
【问题描述】:

假设 TWO asp.net 控件触发 SAME 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);"/>

JQuery

function Discount(chk) {
  $(function () {
    if ( chk.id== $("#R1") )
      alert("Hi R1");

    if (chk.id == $('#R2')) 
      alert("Hi R2");
   });    
  }

【问题讨论】:

    标签: jquery asp.net


    【解决方案1】:

    有很多问题:

    • 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,因此无需查找。

    【讨论】:

      【解决方案2】:

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

         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);
             });    
            }
      

      【讨论】:

      • 什么也没发生。如果我删除“if statemnet”,它会显示“Hi contentBody_R1”和“Hi contentBody_R2”
      • 正常,我不明白,你想删除 if 吗?你想做什么..不清楚
      • 没有。我不想删除 if.. 我只是告诉你正在打印什么
      • 使用:alert(chk.id)(在原始代码中)-chk.id != "R1"(或“R2”)因为 asp.net 与您的 ID 密不可分
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多