Skip to content
Permalink
Browse files

Button: find associated label even without common ancestor. Fixes #70…

…92 - button creation that requires a matching label does not find label in all cases
  • Loading branch information...
ddstreet authored and scottgonzalez committed Mar 11, 2011
1 parent 0eb1106 commit 0b30a1d450f6b7d529732d6a39c5f4057efaaaf4
Showing with 32 additions and 2 deletions.
  1. +22 −0 tests/unit/button/button_tickets.js
  2. +10 −2 ui/jquery.ui.button.js
@@ -20,4 +20,26 @@ test( "#6262 - buttonset not applying ui-corner to invisible elements", function
ok( set.find( "label:eq(2)" ).is( ".ui-button.ui-corner-right" ) );
});

test( "#7092 - button creation that requires a matching label does not find label in all cases", function() {
var group = $( "<span><label for='t7092a'/><input type='checkbox' id='t7092a'/></span>" );
group.find( "input:checkbox" ).button();
ok( group.find( "label" ).is( ".ui-button" ) );

group = $( "<input type='checkbox' id='t7092b'/><label for='t7092b'/>" );
group.filter( "input:checkbox" ).button();
ok( group.filter( "label" ).is( ".ui-button" ) );

group = $( "<span><input type='checkbox' id='t7092c'/></span><label for='t7092c'/>" );
group.find( "input:checkbox" ).button();
ok( group.filter( "label" ).is( ".ui-button" ) );

group = $( "<span><input type='checkbox' id='t7092d'/></span><span><label for='t7092d'/></span>" );
group.find( "input:checkbox" ).button();
ok( group.find( "label" ).is( ".ui-button" ) );

group = $( "<input type='checkbox' id='t7092e'/><span><label for='t7092e'/></span>" );
group.filter( "input:checkbox" ).button();
ok( group.find( "label" ).is( ".ui-button" ) );
});

})( jQuery );
@@ -201,8 +201,16 @@ $.widget( "ui.button", {
if ( this.type === "checkbox" || this.type === "radio" ) {
// we don't search against the document in case the element
// is disconnected from the DOM
this.buttonElement = this.element.parents().last()
.find( "label[for=" + this.element.attr("id") + "]" );
var ancestor = this.element.parents().last(),
labelSelector = "label[for=" + this.element.attr("id") + "]";
this.buttonElement = ancestor.find( labelSelector );
if ( !this.buttonElement.length ) {
ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
this.buttonElement = ancestor.filter( labelSelector );
if ( !this.buttonElement.length ) {
this.buttonElement = ancestor.find( labelSelector );
}
}
this.element.addClass( "ui-helper-hidden-accessible" );

var checked = this.element.is( ":checked" );

0 comments on commit 0b30a1d

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