카테고리 없음

[자바 스크립트] jQuery 데이터 $ (…) .data ( 'foo')는 때때로 Backbone 앱에서 정의되지 않은 것을 반환합니다.

행복을전해요 2021. 2. 18. 05:10

문제는 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