使用$ .contains查找元素是否包含具有焦点的另一个元素

时间:2015-07-02 15:12:41

标签: javascript jquery

我有以下JQuery,这是双击表行的处理的一部分。如果该行包含一个具有活动焦点的输入框,我想退出该函数,否则我想继续:

$("#foo tbody tr").dblclick(function() {
        if ($.contains( $(this)[0], document.activeElement)) {
            return;
        }
        // otherwise, do something with the row
    });

但是,它不起作用:条件显然总是返回false(activeElement不在双击行中),即使该行确实包含一个带焦点的输入框。

怎么了?

编辑:我在这里做的是在双击时将行从一个表移动到另一个表。但每行包含一个单元格,其中包含可以单击以编辑它的文本(当用户单击单元格文本时,它将变为输入框)。我发现,如果用户正在编辑此单元格但双击该行,则会发生移动,我想避免这种情况。

2 个答案:

答案 0 :(得分:1)

您可以使用焦点向元素添加类,并在doubleclick事件中检查该类。然后,您可以在需要时删除该类。http://jsfiddle.net/uq0ga86v/5/

IF

答案 1 :(得分:0)

更好地直接在预期输入上双击双击,在行上执行会在行内的任何活动元素上引发模糊事件

仅供参考,您可以将该事件委托给行(参见:Direct and delegated events

$("#foo tbody tr")
  .off(".nsActive")
  .on("dblclick.nsActive", ".expected-input", function (e) {
     //code here
  });

请注意,在这种情况下,我们将事件委派用于"#foo tbody tr",这意味着在将dblclick事件委托给".expected-input"之前,该元素必须存在。

请参阅 jQuery.on Event names and namespacesDirect and delegated events