현재 가시적 인 스팬과 숨겨진 입력 요소가있는 웹 페이지에 대한 사용자 정의 바인딩을 만들려고합니다. 스팬을 클릭하면 사라지고 입력이 나타납니다. 입력이 포커스를 잃으면 스팬은 입력의 새 값으로 업데이트됩니다. 그러나 어떤 이유로 내 blur
기능이 내 스팬을 클릭 할 때마다 다시 바인딩됩니다. 이는 원하는 것이 아닙니다. 이 문제를 어떻게 해결할 수 있습니까? 내가 두 번 내 범위를 클릭하면 I 만 얻을되어있을 때넉 아웃 사용자 정의 바인딩이 여러 번 실행됩니다.
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 -->
자바 스크립트
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 튜토리얼의 예제는 모든 입력 필드에 바인드되므로 입력란을 클릭해야만 해당 특정 범위 만 토글해야합니다.
나는 그것이 매우 간단했다라고 생각할 수 없다! 감사! 하지만 두 번째 바인딩 해제 함수는 필요하지 않았습니다. '$ (inputName) .unbind ('blur');는 코드를 작동시키기에 충분했다. –
@WeiHao 물론. 나는 실수로 두 번째'바인딩 해제 '를 떠났다. 코드를 수정했습니다. :) 덧붙여서 : 나는 당신의 코드를 조금 리팩터링했다, 나는 좀 더 효율적으로하기 위해 몇몇 변수를 캐싱했다. – freakish
알겠습니다. 감사! –