문제는 Backbone 뷰가 이벤트 처리를 위해 이벤트 위임을 사용한다는 것입니다. 즉 e.target
, 이벤트에 응답하는 요소가 아니라 클릭 된 요소가됩니다. 당신은 클릭하면 <i>
, e.target
그렇게 될 것입니다 <i>
하지만 당신은 텍스트를 클릭하면, e.target
될 것입니다 <button>
; 은 <i>
당신이 찾고있는 데이터 속성이 없습니다하지만은 <button>
않습니다. 때로는 의미 $(e.target).data('tagtype')
할 것이다 undefined
.
간단한 예제에서이 동작을 볼 수 있습니다.
<div id="x">
<button type="button" data-tagtype="love"><i>icon</i> text</button>
</div>
최소한의보기 :
var V = Backbone.View.extend({
el: '#x',
events: {
'click button': 'clicked'
},
clicked: function(ev) {
console.log(
$(ev.target).data('tagtype'),
$(ev.currentTarget).data('tagtype')
);
}
});
데모 : http://jsfiddle.net/ambiguous/pe77p/
당신이 클릭하면 <i>icon</i>
, 당신은 얻을 것이다 undefined love
콘솔에 있지만 클릭하면 text
, 당신은 얻을 것이다 love love
콘솔에서.
그 작은 데모는 또한 솔루션이 포함되어 사용 e.currentTarget
대신을 e.target
.
출처
https://stackoverflow.com/questions/22079847