【问题标题】:JQuery: tr onblur or any event outside tr borderJQuery:tr onblur 或 tr 边界外的任何事件
【发布时间】:2017-07-11 05:23:27
【问题描述】:

如何使用 tr onblur 事件调用函数或如何检测 tr 边界外的任何点击事件?

谢谢

HTML:

<tr id="tr_0" class="table" onblur="Dict[@i].Canc(@j)">
    <td id="frst_0" class="tabl">
        <label id="lbl0_0" class="tdLbl0_0">Some name</label>
        <input id="inpt0_0" class="tdinpt0" type="text" size="10" hidden onblur="Dict[@i].CheckInput0(@j)" />
    </td>
    <td id="sec_0" class="tabl" onclick="Dict[@i].EditInput1(@j)">
        <label id="lbl1_0" class="tdLbl1">Value</label>
        <input id="inpt1_0" class="tdinpt1" type="number" max="99" min="0" style="width: 38px" hidden onblur="Dict[@i].CheckInput1(@j)" onfocus="Dict[@i].ClearInput1(@j)" />
    </td>
    <td>
        <button id="suc_0" class="tdbtn" hidden onclick="Dict[@i].Suc(@j)">Success</button>
        <button id="edit_0" class="tdbtn" onclick="Dict[@i].Edit(@j)">Edit</button>
        <button id="del_0" class="tdbtn" onclick="Dict[@i].Del(@j)">Delete</button>
        <button id="canc_0" class="tdbtn" onclick="Dict[@i].Canc(@j)" hidden>Cancel</button>
    </td>
</tr>

【问题讨论】:

    标签: javascript jquery html-table row onblur


    【解决方案1】:

    使用jQuery.closest 来查看目标元素是否在trtr 中,如下所示:

    $(document).click(function(e) {
      if($(e.target).closest("tr").length)
        alert("tr was clicked!");
      else
        alert("no tr was clicked!");
    });
    

    如果您只想检查单击的元素是否为tr,请像这样使用jQuery.is

    $(document).click(function(e) {
      if($(e.target).is("tr"))
        alert("tr was clicked!");
      else
        alert("no tr was clicked!");
    });
    

    第一种情况示例:

    $(document).click(function(e) {
      if ($(e.target).closest("tr").length) // if the length is != 0 (a tr is found)
        alert("tr was clicked!");
      else                                  // otherwise ...
        alert("no tr was clicked!");
    });
    tr {
      background: #F99;
      height: 50px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
      <tr id="tr_0" class="table" onblur="Dict[@i].Canc(@j)">
        <td id="frst_0" class="tabl">
          <label id="lbl0_0" class="tdLbl0_0">Some name</label>
          <input id="inpt0_0" class="tdinpt0" type="text" size="10" hidden onblur="Dict[@i].CheckInput0(@j)" />
        </td>
        <td id="sec_0" class="tabl" onclick="Dict[@i].EditInput1(@j)">
          <label id="lbl1_0" class="tdLbl1">Value</label>
          <input id="inpt1_0" class="tdinpt1" type="number" max="99" min="0" style="width: 38px" hidden onblur="Dict[@i].CheckInput1(@j)" onfocus="Dict[@i].ClearInput1(@j)" />
        </td>
        <td>
          <button id="suc_0" class="tdbtn" hidden onclick="Dict[@i].Suc(@j)">Success</button>
          <button id="edit_0" class="tdbtn" onclick="Dict[@i].Edit(@j)">Edit</button>
          <button id="del_0" class="tdbtn" onclick="Dict[@i].Del(@j)">Delete</button>
          <button id="canc_0" class="tdbtn" onclick="Dict[@i].Canc(@j)" hidden>Cancel</button>
        </td>
      </tr>
    </table>

    第二种情况的例子:

    $(document).click(function(e) {
      if ($(e.target).is("tr"))     // if the target of the click is a tr
        alert("tr was clicked!");
      else                          // otherwise
        alert("no tr was clicked!");
    });
    tr {
      background: #F99;
      height: 50px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
      <tr id="tr_0" class="table" onblur="Dict[@i].Canc(@j)">
        <td id="frst_0" class="tabl">
          <label id="lbl0_0" class="tdLbl0_0">Some name</label>
          <input id="inpt0_0" class="tdinpt0" type="text" size="10" hidden onblur="Dict[@i].CheckInput0(@j)" />
        </td>
        <td id="sec_0" class="tabl" onclick="Dict[@i].EditInput1(@j)">
          <label id="lbl1_0" class="tdLbl1">Value</label>
          <input id="inpt1_0" class="tdinpt1" type="number" max="99" min="0" style="width: 38px" hidden onblur="Dict[@i].CheckInput1(@j)" onfocus="Dict[@i].ClearInput1(@j)" />
        </td>
        <td>
          <button id="suc_0" class="tdbtn" hidden onclick="Dict[@i].Suc(@j)">Success</button>
          <button id="edit_0" class="tdbtn" onclick="Dict[@i].Edit(@j)">Edit</button>
          <button id="del_0" class="tdbtn" onclick="Dict[@i].Del(@j)">Delete</button>
          <button id="canc_0" class="tdbtn" onclick="Dict[@i].Canc(@j)" hidden>Cancel</button>
        </td>
      </tr>
    </table>

    【讨论】:

    • 你说的在tr的边界之外是什么意思,对吧?
    • @Gamos 请多多关照!
    • $(e.target).closest("tr").length - 完美,非常感谢!
    • 欢迎您!但是您刚才不是说它对每次点击都有效,甚至对 tr 中的元素也是如此?这就是你想要的吗?
    • 是的,你的最佳解决方案 - 是我想要的,你能告诉我,如何通过 tr 的 id 来检查它吗?
    【解决方案2】:

    您可以在文档本身上绑定点击事件,并检查event.target对象,如果event.target的父级不包含tr,手动触发@987654323 @tr 上的事件。

    $.fn.bindBlur = function(callback){
        this.each(function(){
            var that = this;
            $(document).on("click", function(e){
                if(that.is($(e.target) || that.has($(e.target))){
                    return callback();
                }
            });
        });    
    };
    

    【讨论】:

    • 非常感谢,我会试试的
    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多