Skip to content
Permalink
Browse files

Button: Don't fire click/change events if mouse was dragged during cl…

…ick of toggle (checkbox/radio) button. Fixed #6970 - Button state inconsistencies after (accidental) drag-clicking the button.
  • Loading branch information...
kborchers authored and scottgonzalez committed May 13, 2011
1 parent aec3f18 commit a69a1788bc5cd67c6e627e519e20897a0c238945
Showing with 26 additions and 3 deletions.
  1. +26 −3 ui/jquery.ui.button.js
@@ -13,7 +13,7 @@
*/
(function( $, undefined ) {

var lastActive,
var lastActive, startXPos, startYPos, clickDragged,
baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
stateClasses = "ui-state-hover ui-state-active ",
typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
@@ -112,21 +112,44 @@ $.widget( "ui.button", {

if ( toggleButton ) {
this.element.bind( "change.button", function() {
if ( clickDragged ) {
return;
}
self.refresh();
});
// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
// prevents issue where button state changes but checkbox/radio checked state
// does not in Firefox (see ticket #6970)
this.buttonElement
.bind( "mousedown.button", function( event ) {
if ( options.disabled ) {
return;
}
clickDragged = false;
startXPos = event.pageX;
startYPos = event.pageY;
})
.bind( "mouseup.button", function( event ) {
if ( options.disabled ) {
return;
}
if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
clickDragged = true;
}
});
}

if ( this.type === "checkbox" ) {
this.buttonElement.bind( "click.button", function() {
if ( options.disabled ) {
if ( options.disabled || clickDragged ) {
return false;
}
$( this ).toggleClass( "ui-state-active" );
self.buttonElement.attr( "aria-pressed", self.element[0].checked );
});
} else if ( this.type === "radio" ) {
this.buttonElement.bind( "click.button", function() {
if ( options.disabled ) {
if ( options.disabled || clickDragged ) {
return false;
}
$( this ).addClass( "ui-state-active" );

0 comments on commit a69a178

Please sign in to comment.
You can’t perform that action at this time.