Я использую jQuery 2.0.3 со следующими фрагментами:
function fixTextbox(element) {
var span = "<span class='k-widget k-autocomplete k-header k-state-default'></span>";
var wrap = $(element).wrap(span);
}
с этими обработчиками событий:
$(document).on("focus", ".k-textbox", function () {
console.debug("focus");
fixTextbox(this);
$(this).parent().addClass("k-state-focused");
});
$(document).on("blur", ".k-textbox", function () {
console.debug("blur");
$(this).parent().removeClass("k-state-focused");
});
и этот HTML:
<input type="text" class="k-textbox" />
Проблема здесь в том, что когда я запускаю.wrap, он не связывает событие размытия.
Есть ли другой способ, которым я должен инкапсулировать ввод в промежутке, который не потерял бы события? Или я должен вручную перезаписывать события после обертки?
Я думаю, проблема заключается в том, что когда вы переносите элемент ввода другим элементом, он заставляет какой-то перехват браузера дерева рендеринга, из-за чего входной элемент теряет фокус.
Демо: Fiddle - см. В Chrome - в консоли вы можете видеть, как фокус и размытие записываются
Возможное решение состоит в том, чтобы обернуть область вокруг перед событием фокуса - на готовом документе или если элементы создаются динамически, то во время самого создания элемента.
jQuery(function ($) {
$('.k-textbox').wrap('<span class="k-widget k-autocomplete k-header k-state-default"></span>')
})
Демо: скрипка