В настоящее время я пытаюсь создать пользовательскую привязку для своей веб-страницы, где у меня есть видимый диапазон и скрытый элемент ввода. Если я нажму на диапазон, он исчезнет, и появится сообщение. Как только вход теряет фокус, диапазон обновляется с новым значением от входа. Однако по какой-то причине моя функция blur
связывается снова каждый раз, когда я нажимаю мой диапазон, чего я не хочу. Как я могу это исправить?Многопользовательские неполадки с нокаутом
HTML
<!-- ko foreach: formula -->
<span data-bind="text: $data, attr: {name: $index}, convert: $index()"></span>
<input data-bind="value: $data, attr: {name: $index}" class="hide"/><br/>
<!-- /ko -->
JavaScript
ko.bindingHandlers.convert = {
init: function(element, valueAccessor) {
$(element).click(function() {
var index = valueAccessor();
var inputName = "input[name="+index+"]";
$(element).addClass("hide");
$(inputName).removeClass("hide").focus().blur(function() {
console.log("firing");
$(inputName).addClass("hide");
$(element).removeClass("hide");
$(element).text($(inputName).val());
});
});
}
};
Так что, если я нажимаю на моем пролете в два раза, я хотел бы получить
firing
firing
firing
в моей консоли, когда я только должен получить firing
дважды.
Примечание: Я не могу следовать примеру hasFocus
из учебника по нокауту, поскольку он связывается со всеми полями ввода, и мне нужно, чтобы поля ввода переключались только для этого конкретного шага, который нажал.
Я не могу поверить, что это было так просто! Благодаря! Тем не менее, мне не нужна была вторая функция unbind. '$ (inputName) .unbind ('blur');' было достаточно, чтобы заставить код работать. –
@WeiHao Конечно. По ошибке я оставил второй «unbind». Я редактирую код. :) Кстати: я немного переработал ваш код, я кэшировал некоторые переменные, чтобы сделать его более эффективным. – freakish
Вижу, я вижу. Благодаря! –