/ / Використання $ .contens, щоб знайти, чи містить елемент інший із фокусом - javascript, jquery

Використання $ .contains для пошуку, якщо елемент містить інший з фокусом - javascript, jquery

У мене є такий JQuery, який є частиною обробки для подвійного клацання рядка таблиці. Якщо рядок містить поле введення з активним фокусом, я хочу вийти з функції, інакше я хочу продовжити:

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

Однак це не працює: умовне, мабуть, завжди повертається false (активний елемент не в рядку з подвійним клацанням), навіть коли рядок містить поле введення з фокусом.

Що не так?

РЕДАГУВАТИ:те, що я роблю тут, - це переміщення рядка з однієї таблиці в іншу при його подвійному клацанні. Але кожен рядок містить комірку, яка містить текст, на який можна натиснути, щоб редагувати його (коли користувач клацає один раз на тексті комірки, я перетворююсь на поле введення). Я виявляю, що якщо користувач редагує цю комірку, але двічі клацає по рядку, відбувається переміщення, чого я хочу уникнути.

Відповіді:

1 для відповіді № 1

Ви можете додати клас до елемента з фокусом і перевірити наявність цього у вашій події doubleclick. Потім ви можете видалити клас, коли це буде потрібно.http://jsfiddle.net/uq0ga86v/5/

$("input").focus(function(){
$("input").removeClass("focus");
$(this).addClass("focus");
})
$("#foo tbody tr").dblclick(function() {
if ($(this).find("input.focus").length != 0) {
alert("g");
}
// otherwise, do something with the row
$(this).find("input.focus").removeClass("focus");
});

0 для відповіді № 2

Краще обробляйте подвійне клацання безпосередньо на очікуваному введенні, якщо робити підряд, то піднімається подія розмиття на будь-якому активному елементі всередині рядка.

FYI, ви можете делегувати цю подію на рядок (подивитися: Прямі та делеговані події)

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

Майте на увазі, що в цьому випадку ми найняли делегування заходу "#foo tbody tr" означає, що елемент повинен існувати перед делегуванням dblclick подія на ".expected-input" до цього

Побачити jQuery.on: Назви подій та простори імен і Прямі та делеговані події.