Skip to content

Commit

Permalink
Mouse: tie the preventClickEvent property to the event target, not th…
Browse files Browse the repository at this point in the history
…e container. Fixes #4752 - link event firing on sortable with connect list
  • Loading branch information
joshvarner authored and scottgonzalez committed Nov 9, 2010
1 parent 412d1aa commit e2a693b
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 3 deletions.
1 change: 1 addition & 0 deletions tests/jquery.simulate.js
Expand Up @@ -120,6 +120,7 @@ $.extend($.simulate.prototype, {
this.simulateEvent(document, "mousemove", coord);
this.simulateEvent(document, "mousemove", coord);
this.simulateEvent(target, "mouseup", coord);
this.simulateEvent(target, "click", coord);
},
findCenter: function(el) {
var el = $(this.target), o = el.offset();
Expand Down
44 changes: 44 additions & 0 deletions tests/unit/sortable/sortable_tickets.js
Expand Up @@ -36,4 +36,48 @@ test("#3019: Stop fires too early", function() {

});

test('#4752: link event firing on sortable with connect list', function () {
var fired = {},
hasFired = function (type) { return (type in fired) && (true === fired[type]); };

$('#sortable').clone().attr('id', 'sortable2').insertAfter('#sortable');

$('#main ul').sortable({
connectWith: '#main ul',
change: function (e, ui) {
fired.change = true;
},
receive: function (e, ui) {
fired.receive = true;
},
remove: function (e, ui) {
fired.remove = true;
}
});

$('#main ul li').live('click.ui-sortable-test', function () {
fired.click = true;
});

$('#sortable li:eq(0)').simulate('click');
ok(!hasFired('change'), 'Click only, change event should not have fired');
ok(hasFired('click'), 'Click event should have fired');

// Drag an item within the first list
fired = {};
$('#sortable li:eq(0)').simulate('drag', { dx: 0, dy: 40 });
ok(hasFired('change'), '40px drag, change event should have fired');
ok(!hasFired('receive'), 'Receive event should not have fired');
ok(!hasFired('remove'), 'Remove event should not have fired');
ok(!hasFired('click'), 'Click event should not have fired');

// Drag an item from the first list to the second, connected list
fired = {};
$('#sortable li:eq(0)').simulate('drag', { dx: 0, dy: 150 });
ok(hasFired('change'), '150px drag, change event should have fired');
ok(hasFired('receive'), 'Receive event should have fired');
ok(hasFired('remove'), 'Remove event should have fired');
ok(!hasFired('click'), 'Click event should not have fired');
});

})(jQuery);
10 changes: 7 additions & 3 deletions ui/jquery.ui.mouse.js
Expand Up @@ -26,8 +26,8 @@ $.widget("ui.mouse", {
return self._mouseDown(event);
})
.bind('click.'+this.widgetName, function(event) {
if(self._preventClickEvent) {
self._preventClickEvent = false;
if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
$.removeData(event.target, self.widgetName + '.preventClickEvent');
event.stopImmediatePropagation();
return false;
}
Expand Down Expand Up @@ -118,7 +118,11 @@ $.widget("ui.mouse", {

if (this._mouseStarted) {
this._mouseStarted = false;
this._preventClickEvent = (event.target == this._mouseDownEvent.target);

if (event.target == this._mouseDownEvent.target) {
$.data(event.target, this.widgetName + '.preventClickEvent', true);
}

this._mouseStop(event);
}

Expand Down

0 comments on commit e2a693b

Please sign in to comment.