Skip to content

Commit e2a693b

Browse files
joshvarnerscottgonzalez
authored andcommitted
Mouse: tie the preventClickEvent property to the event target, not the container. Fixes #4752 - link event firing on sortable with connect list
1 parent 412d1aa commit e2a693b

File tree

3 files changed

+52
-3
lines changed

3 files changed

+52
-3
lines changed

tests/jquery.simulate.js

+1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ $.extend($.simulate.prototype, {
120120
this.simulateEvent(document, "mousemove", coord);
121121
this.simulateEvent(document, "mousemove", coord);
122122
this.simulateEvent(target, "mouseup", coord);
123+
this.simulateEvent(target, "click", coord);
123124
},
124125
findCenter: function(el) {
125126
var el = $(this.target), o = el.offset();

tests/unit/sortable/sortable_tickets.js

+44
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,48 @@ test("#3019: Stop fires too early", function() {
3636

3737
});
3838

39+
test('#4752: link event firing on sortable with connect list', function () {
40+
var fired = {},
41+
hasFired = function (type) { return (type in fired) && (true === fired[type]); };
42+
43+
$('#sortable').clone().attr('id', 'sortable2').insertAfter('#sortable');
44+
45+
$('#main ul').sortable({
46+
connectWith: '#main ul',
47+
change: function (e, ui) {
48+
fired.change = true;
49+
},
50+
receive: function (e, ui) {
51+
fired.receive = true;
52+
},
53+
remove: function (e, ui) {
54+
fired.remove = true;
55+
}
56+
});
57+
58+
$('#main ul li').live('click.ui-sortable-test', function () {
59+
fired.click = true;
60+
});
61+
62+
$('#sortable li:eq(0)').simulate('click');
63+
ok(!hasFired('change'), 'Click only, change event should not have fired');
64+
ok(hasFired('click'), 'Click event should have fired');
65+
66+
// Drag an item within the first list
67+
fired = {};
68+
$('#sortable li:eq(0)').simulate('drag', { dx: 0, dy: 40 });
69+
ok(hasFired('change'), '40px drag, change event should have fired');
70+
ok(!hasFired('receive'), 'Receive event should not have fired');
71+
ok(!hasFired('remove'), 'Remove event should not have fired');
72+
ok(!hasFired('click'), 'Click event should not have fired');
73+
74+
// Drag an item from the first list to the second, connected list
75+
fired = {};
76+
$('#sortable li:eq(0)').simulate('drag', { dx: 0, dy: 150 });
77+
ok(hasFired('change'), '150px drag, change event should have fired');
78+
ok(hasFired('receive'), 'Receive event should have fired');
79+
ok(hasFired('remove'), 'Remove event should have fired');
80+
ok(!hasFired('click'), 'Click event should not have fired');
81+
});
82+
3983
})(jQuery);

ui/jquery.ui.mouse.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ $.widget("ui.mouse", {
2626
return self._mouseDown(event);
2727
})
2828
.bind('click.'+this.widgetName, function(event) {
29-
if(self._preventClickEvent) {
30-
self._preventClickEvent = false;
29+
if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
30+
$.removeData(event.target, self.widgetName + '.preventClickEvent');
3131
event.stopImmediatePropagation();
3232
return false;
3333
}
@@ -118,7 +118,11 @@ $.widget("ui.mouse", {
118118

119119
if (this._mouseStarted) {
120120
this._mouseStarted = false;
121-
this._preventClickEvent = (event.target == this._mouseDownEvent.target);
121+
122+
if (event.target == this._mouseDownEvent.target) {
123+
$.data(event.target, this.widgetName + '.preventClickEvent', true);
124+
}
125+
122126
this._mouseStop(event);
123127
}
124128

0 commit comments

Comments
 (0)