シナリオ
私のバックボーン アプリのビューは、複数のboxes(which are div elements)
. delete
ユーザーが 1 つのボックスをクリックし、マウス ボタンを 500 ミリ秒間押したままにすると、左上隅にボタンを表示したいと考えています。ユーザーが他の場所をクリックすると#wrapper
、そのdelete
ボタンは非表示になります。
問題
したがってdelete
、ボタンを表示することは問題ではありません。1秒間クリックしたままにすると、削除ボタンが表示され、0.5秒間削除ボタンが表示されてから非表示になります。#wrapper
この削除ボタンを実際に非表示にする親要素にもクリックイベントを追加しているため、非表示になります。
質問
#wrapper
では、子要素をクリックして押したままにしているときに、親要素がクリックイベントをトリガーしないようにするにはどうすればよいbox
ですか?
これが私のコードです
親要素モジュールのコードは次のとおりです
var Boxes = Backbone.View.extend({
el: '#wrapper',
events: {
'click': 'method' //when clicked on wrapper i.e. parent of box trigger method function
},
render: function (PaintBoxModel) {
var paintBoxView = new PaintBoxView({ model: PaintBoxModel });
this.$el.find('#contents').append(paintBoxView.render().el);
return this;
},
method: function () {
console.log('method');
App.Vent.trigger('bodyclicked'); //trigger an event
}
});
ここに子要素のモジュールがあります
var Box = Backbone.View.extend({
events: {
'mousedown': 'mouseHoldDown',
'mouseup': 'removeMouseHoldDown'
},
initialize: function () {
this.timeoutId = 0;
App.Vent.on('bodyclicked', this.removeDeleteBtnShadow.bind(this)); //here I am listening to the click event when parent `#wrapper` is clicked
},
mouseHoldDown: function () {
this.timeoutId = setTimeout(this.addDeleteBtnShadow.bind(this), 500);
},
removeMouseHoldDown: function () {
clearTimeout(this.timeoutId);
},
addDeleteBtnShadow: function () {
this.$el.append('<a href="#" class="remove">X</a>');
this.$el.addClass('is-shadow');
},
removeDeleteBtnShadow: function () {
this.$el.find('.remove').remove();
this.$el.removeClass('is-shadow');
}
});