1
我目前正在嘗試爲我的網頁創建一個自定義綁定,其中有一個可見的跨度和隱藏的輸入元素。如果我點擊跨度,它將消失並且輸入會出現。一旦輸入失去焦點,跨度就會被輸入中的新值更新。但是,由於某種原因,我的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
兩次。
注意:我無法遵循Knockout教程中的hasFocus
示例,因爲它綁定到所有輸入字段,並且我需要我的輸入字段才能針對正在單擊的特定跨度進行切換。
我簡直不敢相信它那麼簡單!謝謝!雖然我不需要第二個解除綁定功能。 '$(inputName).unbind('blur');'足以使代碼正常工作。 –
@魏浩當然。我錯誤地放棄了第二個「解綁」。我編輯了代碼。 :)順便說一句:我已經重構了一下你的代碼,我已經緩存了一些變量以使它更有效率。 – freakish
我明白了。謝謝! –