У мене є такий 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: Назви подій та простори імен і Прямі та делеговані події.