現在、表示されているスパンと非表示の入力要素がある Web ページのカスタム バインディングを作成しようとしています。スパンをクリックすると、スパンが消えて入力が表示されます。入力がフォーカスを失うと、スパンは入力からの新しい値で更新されます。ただし、何らかの理由で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());
});
});
}
};
スパンを 2 回クリックすると、
firing
firing
firing
私のコンソールでは、firing
2回しか取得できないはずです。
注: hasFocus
Knockout チュートリアルの例はすべての入力フィールドにバインドされるため、従うことはできません。入力フィールドは、クリックされている特定のスパンに対してのみトグルする必要があります。