클릭 핸들러가 실행되지 않는 이유는 요소에 적용되지 않았기 때문입니다. 당신이 JQuery와이 작업을 수행 그래서 때
$('.some-class').on('some-event', someFunction);
을 다음 처리기에 대한 해당 이벤트에 바인딩하려면 먼저 jQuery를 당신의 $('.some-class')
선택을 찾을 수 있습니다. 귀하의 경우, 대부분의 경우 #btnParse
은 이벤트를 바인딩 할 때 녹아웃으로 페이지에 렌더링되지 않습니다. 또는 원본 요소가 렌더링되고 파괴 된 다음 다른 요소가 렌더링 될 수도 있습니다. 이 두 번째 시나리오에서는 이벤트 처리기가 단추 위에 남아 있지 않습니다.하나 개의 대안은 (내가하지 않는 것이 좋습니다 있음) document
수준에서처럼 DOM에서 핸들러 높은 최대 바인딩하고, 필터 만에 이벤트 ID가 #btnParse
뭔가들 :
$(document).on('click', '#btnParse', function() { console.log('hi'); });
이유 I 그것이 나쁜 knockout 연습이기 때문에 당신이 권장하는 다른 게시물로 click
바인딩을 사용해야합니다 것이 좋습니다 않습니다. 또한 id 속성을 사용하고 있습니다. 템플릿 동적 콘텐트에 대해서는 일반적으로 좋은 아이디어가 아닙니다. 고유 정적 요소에 대해 ID가 절대적으로 필요하지 않는 한 클래스를 사용하십시오.
knockout의 클릭 바인딩을 올바르게 사용하는 방법은 까다로운 점 중 하나는 녹아웃이 범위를 지정하는 방식을 이해해야한다는 것입니다. 또한
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
경우 : 예를 들어, 당신은 루프 내부의 클릭을 결합하고, 당신이 당신의 기본보기 모델에서 핸들러를 원한다면, 당신은 루프가 당신의 컨텍스트를 변경하기 때문에 부모 범위를 참조 할 필요 그 물건 비트와 함께
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
재생하고 있다면 새로운 질문 : 당신은 당신이이 같이 클릭 핸들러를 바인드해야, 핸들러합니다 (this
)로 실행하는 자바 스크립트 컨텍스트를 변경해야 여전히 혼란 스럽다. 행운을 빕니다!
knockouts 클릭 바인딩을 통해 클릭 기능을 추가하지 않는 이유는 무엇입니까? – Tyrsius
네, 할 수 있고 실제로 작동합니다. 그러나 데이터 바인딩을 사용하면 실제로 뷰 모델과 관련된 무언가를 위해 예약되어야한다고 생각합니다. 내 페이지에서 요소를 조작하고 싶다면 녹아웃을 사용해서는 안됩니다. 나는 또한 이것이 필요하다면 이것으로 간단한 설정이 작동하지 않는다는 것에 짜증이 난다. –
당신이 가리키는 쪽지는 databind 클릭 함수를위한 것입니다, 그것 jquery 클릭에 대해 이야기하지 않습니다. – Tyrsius