我有以下JQuery,这是双击表行的处理的一部分。如果该行包含一个具有活动焦点的输入框,我想退出该函数,否则我想继续:
$("#foo tbody tr").dblclick(function() {
if ($.contains( $(this)[0], document.activeElement)) {
return;
}
// otherwise, do something with the row
});
但是,它不起作用:条件显然总是返回false
(activeElement不在双击行中),即使该行确实包含一个带焦点的输入框。
怎么了?
编辑:我在这里做的是在双击时将行从一个表移动到另一个表。但每行包含一个单元格,其中包含可以单击以编辑它的文本(当用户单击单元格文本时,它将变为输入框)。我发现,如果用户正在编辑此单元格但双击该行,则会发生移动,我想避免这种情况。
答案 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 namespaces和Direct and delegated events。