2011-01-09 21:58:47 +00:00
module ( "attributes" , { teardown : moduleTeardown } ) ;
2009-04-20 17:05:18 +00:00
2012-05-29 16:40:13 +00:00
var bareObj = function ( value ) { return value ; } ;
var functionReturningObj = function ( value ) { return ( function ( ) { return value ; } ) ; } ;
2009-12-10 04:57:19 +00:00
2012-05-29 16:40:13 +00:00
/ *
=== === == local reference === === =
bareObj and functionReturningObj can be used to test passing functions to setters
See testVal below for an example
bareObj ( value ) ;
This function returns whatever value is passed in
functionReturningObj ( value ) ;
Returns a function that returns the value
* /
2011-03-14 01:27:45 +00:00
2011-10-06 21:17:51 +00:00
test ( "jQuery.propFix integrity test" , function ( ) {
expect ( 1 ) ;
2011-08-05 14:02:33 +00:00
2011-03-25 05:46:29 +00:00
// This must be maintained and equal jQuery.attrFix when appropriate
// Ensure that accidental or erroneous property
// overwrites don't occur
// This is simply for better code coverage and future proofing.
2011-05-04 04:31:01 +00:00
var props = {
2011-10-22 20:03:57 +00:00
tabindex : "tabIndex" ,
readonly : "readOnly" ,
"for" : "htmlFor" ,
"class" : "className" ,
maxlength : "maxLength" ,
cellspacing : "cellSpacing" ,
cellpadding : "cellPadding" ,
rowspan : "rowSpan" ,
colspan : "colSpan" ,
usemap : "useMap" ,
frameborder : "frameBorder" ,
contenteditable : "contentEditable"
} ;
if ( ! jQuery . support . enctype ) {
props . enctype = "encoding" ;
}
2011-08-04 20:34:59 +00:00
2011-05-04 04:31:01 +00:00
deepEqual ( props , jQuery . propFix , "jQuery.propFix passes integrity check" ) ;
2010-11-09 21:31:52 +00:00
} ) ;
2009-03-18 21:15:38 +00:00
test ( "attr(String)" , function ( ) {
2011-10-22 20:03:57 +00:00
expect ( 46 ) ;
2010-12-30 06:34:48 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . attr ( "type" ) , "text" , "Check for type attribute" ) ;
equal ( jQuery ( "#radio1" ) . attr ( "type" ) , "radio" , "Check for type attribute" ) ;
equal ( jQuery ( "#check1" ) . attr ( "type" ) , "checkbox" , "Check for type attribute" ) ;
equal ( jQuery ( "#simon1" ) . attr ( "rel" ) , "bookmark" , "Check for rel attribute" ) ;
equal ( jQuery ( "#google" ) . attr ( "title" ) , "Google!" , "Check for title attribute" ) ;
equal ( jQuery ( "#mark" ) . attr ( "hreflang" ) , "en" , "Check for hreflang attribute" ) ;
equal ( jQuery ( "#en" ) . attr ( "lang" ) , "en" , "Check for lang attribute" ) ;
equal ( jQuery ( "#simon" ) . attr ( "class" ) , "blog link" , "Check for class attribute" ) ;
equal ( jQuery ( "#name" ) . attr ( "name" ) , "name" , "Check for name attribute" ) ;
equal ( jQuery ( "#text1" ) . attr ( "name" ) , "action" , "Check for name attribute" ) ;
2011-04-11 20:33:29 +00:00
ok ( jQuery ( "#form" ) . attr ( "action" ) . indexOf ( "formaction" ) >= 0 , "Check for action attribute" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . attr ( "value" , "t" ) . attr ( "value" ) , "t" , "Check setting the value attribute" ) ;
equal ( jQuery ( "<div value='t'></div>" ) . attr ( "value" ) , "t" , "Check setting custom attr named 'value' on a div" ) ;
equal ( jQuery ( "#form" ) . attr ( "blah" , "blah" ) . attr ( "blah" ) , "blah" , "Set non-existant attribute on a form" ) ;
equal ( jQuery ( "#foo" ) . attr ( "height" ) , undefined , "Non existent height attribute should return undefined" ) ;
2011-08-05 14:02:33 +00:00
2011-03-25 04:35:50 +00:00
// [7472] & [3113] (form contains an input with name="action" or name="id")
2011-04-11 20:33:29 +00:00
var extras = jQuery ( "<input name='id' name='name' /><input id='target' name='target' />" ) . appendTo ( "#testForm" ) ;
2011-09-12 23:40:14 +00:00
equal ( jQuery ( "#form" ) . attr ( "action" , "newformaction" ) . attr ( "action" ) , "newformaction" , "Check that action attribute was changed" ) ;
equal ( jQuery ( "#testForm" ) . attr ( "target" ) , undefined , "Retrieving target does not equal the input with name=target" ) ;
equal ( jQuery ( "#testForm" ) . attr ( "target" , "newTarget" ) . attr ( "target" ) , "newTarget" , "Set target successfully on a form" ) ;
equal ( jQuery ( "#testForm" ) . removeAttr ( "id" ) . attr ( "id" ) , undefined , "Retrieving id does not equal the input with name=id after id is removed [#7472]" ) ;
2011-03-25 06:07:15 +00:00
// Bug #3685 (form contains input with name="name")
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#testForm" ) . attr ( "name" ) , undefined , "Retrieving name does not retrieve input with name=name" ) ;
2011-03-25 06:07:15 +00:00
extras . remove ( ) ;
2011-08-05 14:02:33 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . attr ( "maxlength" ) , "30" , "Check for maxlength attribute" ) ;
equal ( jQuery ( "#text1" ) . attr ( "maxLength" ) , "30" , "Check for maxLength attribute" ) ;
equal ( jQuery ( "#area1" ) . attr ( "maxLength" ) , "30" , "Check for maxLength attribute" ) ;
2009-03-18 21:15:38 +00:00
2010-08-26 16:36:50 +00:00
// using innerHTML in IE causes href attribute to be serialized to the full path
2011-04-17 06:43:57 +00:00
jQuery ( "<a/>" ) . attr ( { "id" : "tAnchor5" , "href" : "#5" } ) . appendTo ( "#qunit-fixture" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#tAnchor5" ) . attr ( "href" ) , "#5" , "Check for non-absolute href (an anchor)" ) ;
2009-03-18 21:15:38 +00:00
2011-04-02 01:38:54 +00:00
// list attribute is readonly by default in browsers that support it
2011-04-11 20:33:29 +00:00
jQuery ( "#list-test" ) . attr ( "list" , "datalist" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#list-test" ) . attr ( "list" ) , "datalist" , "Check setting list attribute" ) ;
2011-04-02 01:38:54 +00:00
2009-03-18 21:15:38 +00:00
// Related to [5574] and [5683]
var body = document . body , $body = jQuery ( body ) ;
2011-04-11 20:33:29 +00:00
strictEqual ( $body . attr ( "foo" ) , undefined , "Make sure that a non existent attribute returns undefined" ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
body . setAttribute ( "foo" , "baz" ) ;
2011-11-06 20:27:42 +00:00
equal ( $body . attr ( "foo" ) , "baz" , "Make sure the dom attribute is retrieved when no expando is found" ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
$body . attr ( "foo" , "cool" ) ;
2011-11-06 20:27:42 +00:00
equal ( $body . attr ( "foo" ) , "cool" , "Make sure that setting works well when both expando and dom attribute are available" ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
body . removeAttribute ( "foo" ) ; // Cleanup
2009-12-22 20:02:52 +00:00
2011-05-12 23:42:53 +00:00
var select = document . createElement ( "select" ) , optgroup = document . createElement ( "optgroup" ) , option = document . createElement ( "option" ) ;
optgroup . appendChild ( option ) ;
select . appendChild ( optgroup ) ;
equal ( jQuery ( option ) . attr ( "selected" ) , "selected" , "Make sure that a single option is selected, even when in an optgroup." ) ;
2011-04-11 20:33:29 +00:00
var $img = jQuery ( "<img style='display:none' width='215' height='53' src='http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif'/>" ) . appendTo ( "body" ) ;
2011-11-06 20:27:42 +00:00
equal ( $img . attr ( "width" ) , "215" , "Retrieve width attribute an an element with display:none." ) ;
equal ( $img . attr ( "height" ) , "53" , "Retrieve height attribute an an element with display:none." ) ;
2011-04-02 01:13:01 +00:00
2011-03-30 01:49:37 +00:00
// Check for style support
2011-04-11 20:33:29 +00:00
ok ( ! ! ~ jQuery ( "#dl" ) . attr ( "style" ) . indexOf ( "position" ) , "Check style attribute getter, also normalize css props to lowercase" ) ;
ok ( ! ! ~ jQuery ( "#foo" ) . attr ( "style" , "position:absolute;" ) . attr ( "style" ) . indexOf ( "position" ) , "Check style setter" ) ;
2011-04-02 01:13:01 +00:00
2011-04-17 22:15:20 +00:00
// Check value on button element (#1954)
var $button = jQuery ( "<button value='foobar'>text</button>" ) . insertAfter ( "#button" ) ;
2011-11-06 20:27:42 +00:00
equal ( $button . attr ( "value" ) , "foobar" , "Value retrieval on a button does not return innerHTML" ) ;
equal ( $button . attr ( "value" , "baz" ) . html ( ) , "text" , "Setting the value does not change innerHTML" ) ;
2011-04-17 22:15:20 +00:00
2011-05-01 21:09:50 +00:00
// Attributes with a colon on a table element (#1591)
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . attr ( "test:attrib" ) , undefined , "Retrieving a non-existent attribute on a table with a colon does not throw an error." ) ;
equal ( jQuery ( "#table" ) . attr ( "test:attrib" , "foobar" ) . attr ( "test:attrib" ) , "foobar" , "Setting an attribute on a table with a colon does not throw an error." ) ;
2011-05-01 21:09:50 +00:00
2011-05-14 16:07:40 +00:00
var $form = jQuery ( "<form class='something'></form>" ) . appendTo ( "#qunit-fixture" ) ;
2011-05-16 14:17:50 +00:00
equal ( $form . attr ( "class" ) , "something" , "Retrieve the class attribute on a form." ) ;
var $a = jQuery ( "<a href='#' onclick='something()'>Click</a>" ) . appendTo ( "#qunit-fixture" ) ;
equal ( $a . attr ( "onclick" ) , "something()" , "Retrieve ^on attribute without anonymous function wrapper." ) ;
2011-05-18 15:05:20 +00:00
ok ( jQuery ( "<div/>" ) . attr ( "doesntexist" ) === undefined , "Make sure undefined is returned when no attribute is found." ) ;
ok ( jQuery ( "<div/>" ) . attr ( "title" ) === undefined , "Make sure undefined is returned when no attribute is found." ) ;
equal ( jQuery ( "<div/>" ) . attr ( "title" , "something" ) . attr ( "title" ) , "something" , "Set the title attribute." ) ;
ok ( jQuery ( ) . attr ( "doesntexist" ) === undefined , "Make sure undefined is returned when no element is there." ) ;
2011-05-18 15:46:22 +00:00
equal ( jQuery ( "<div/>" ) . attr ( "value" ) , undefined , "An unset value on a div returns undefined." ) ;
equal ( jQuery ( "<input/>" ) . attr ( "value" ) , "" , "An unset value on an input returns current value." ) ;
2011-10-22 20:03:57 +00:00
$form = jQuery ( "#form" ) . attr ( "enctype" , "multipart/form-data" ) ;
equal ( $form . prop ( "enctype" ) , "multipart/form-data" , "Set the enctype of a form (encoding in IE6/7 #6743)" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-04-15 21:41:54 +00:00
test ( "attr(String) in XML Files" , function ( ) {
expect ( 3 ) ;
var xml = createDashboardXML ( ) ;
equal ( jQuery ( "locations" , xml ) . attr ( "class" ) , "foo" , "Check class attribute in XML document" ) ;
equal ( jQuery ( "location" , xml ) . attr ( "for" ) , "bar" , "Check for attribute in XML document" ) ;
equal ( jQuery ( "location" , xml ) . attr ( "checked" ) , "different" , "Check that hooks are not attached in XML document" ) ;
} ) ;
2009-03-18 21:15:38 +00:00
test ( "attr(String, Function)" , function ( ) {
expect ( 2 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . attr ( "value" , function ( ) { return this . id ; } ) [ 0 ] . value , "text1" , "Set value from id" ) ;
equal ( jQuery ( "#text1" ) . attr ( "title" , function ( i ) { return i ; } ) . attr ( "title" ) , "0" , "Set value with an index" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
test ( "attr(Hash)" , function ( ) {
2009-07-11 13:57:38 +00:00
expect ( 3 ) ;
2009-03-18 21:15:38 +00:00
var pass = true ;
2011-04-11 20:33:29 +00:00
jQuery ( "div" ) . attr ( { foo : "baz" , zoo : "ping" } ) . each ( function ( ) {
if ( this . getAttribute ( "foo" ) != "baz" && this . getAttribute ( "zoo" ) != "ping" ) pass = false ;
2009-03-18 21:15:38 +00:00
} ) ;
ok ( pass , "Set Multiple Attributes" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . attr ( { value : function ( ) { return this . id ; } } ) [ 0 ] . value , "text1" , "Set attribute to computed value #1" ) ;
equal ( jQuery ( "#text1" ) . attr ( { title : function ( i ) { return i ; } } ) . attr ( "title" ) , "0" , "Set attribute to computed value #2" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
test ( "attr(String, Object)" , function ( ) {
2011-12-06 20:25:38 +00:00
expect ( 81 ) ;
2010-09-28 15:12:13 +00:00
2009-03-18 21:15:38 +00:00
var div = jQuery ( "div" ) . attr ( "foo" , "bar" ) ,
fail = false ;
2010-09-28 15:12:13 +00:00
2009-03-18 21:15:38 +00:00
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
2011-04-11 20:33:29 +00:00
if ( div . get ( i ) . getAttribute ( "foo" ) != "bar" ) {
2009-03-18 21:15:38 +00:00
fail = i ;
break ;
}
}
2010-09-28 15:12:13 +00:00
2011-11-06 20:27:42 +00:00
equal ( fail , false , "Set Attribute, the #" + fail + " element didn't get the attribute 'foo'" ) ;
2009-03-18 21:15:38 +00:00
2011-05-04 04:31:01 +00:00
ok ( jQuery ( "#foo" ) . attr ( { "width" : null } ) , "Try to set an attribute to nothing" ) ;
2009-03-18 21:15:38 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "name" , "something" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#name" ) . attr ( "name" ) , "something" , "Set name attribute" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "name" , null ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#name" ) . attr ( "name" ) , undefined , "Remove name attribute" ) ;
2011-09-12 23:40:14 +00:00
var $input = jQuery ( "<input>" , { name : "something" , id : "specified" } ) ;
equal ( $input . attr ( "name" ) , "something" , "Check element creation gets/sets the name attribute." ) ;
equal ( $input . attr ( "id" ) , "specified" , "Check element creation gets/sets the id attribute." ) ;
2011-05-04 19:53:00 +00:00
jQuery ( "#check2" ) . prop ( "checked" , true ) . prop ( "checked" , false ) . attr ( "checked" , true ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "check2" ) . checked , true , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . prop ( "checked" ) , true , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . attr ( "checked" ) , "checked" , "Set checked attribute" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#check2" ) . attr ( "checked" , false ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "check2" ) . checked , false , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . prop ( "checked" ) , false , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . attr ( "checked" ) , undefined , "Set checked attribute" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#text1" ) . attr ( "readonly" , true ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . readOnly , true , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . prop ( "readOnly" ) , true , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . attr ( "readonly" ) , "readonly" , "Set readonly attribute" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#text1" ) . attr ( "readonly" , false ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . readOnly , false , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . prop ( "readOnly" ) , false , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . attr ( "readonly" ) , undefined , "Set readonly attribute" ) ;
2011-05-04 01:44:42 +00:00
jQuery ( "#check2" ) . prop ( "checked" , true ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "check2" ) . checked , true , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . prop ( "checked" ) , true , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . attr ( "checked" ) , "checked" , "Set checked attribute" ) ;
2011-05-04 01:44:42 +00:00
jQuery ( "#check2" ) . prop ( "checked" , false ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "check2" ) . checked , false , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . prop ( "checked" ) , false , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . attr ( "checked" ) , undefined , "Set checked attribute" ) ;
2011-05-04 04:31:01 +00:00
2011-05-13 17:39:38 +00:00
jQuery ( "#check2" ) . attr ( "checked" , "checked" ) ;
equal ( document . getElementById ( "check2" ) . checked , true , "Set checked attribute with 'checked'" ) ;
equal ( jQuery ( "#check2" ) . prop ( "checked" ) , true , "Set checked attribute" ) ;
equal ( jQuery ( "#check2" ) . attr ( "checked" ) , "checked" , "Set checked attribute" ) ;
2011-09-14 18:25:14 +00:00
QUnit . reset ( ) ;
var $radios = jQuery ( "#checkedtest" ) . find ( "input[type='radio']" ) ;
$radios . eq ( 1 ) . click ( ) ;
equal ( $radios . eq ( 1 ) . prop ( "checked" ) , true , "Second radio was checked when clicked" ) ;
equal ( $radios . attr ( "checked" ) , $radios [ 0 ] . checked ? "checked" : undefined , "Known booleans do not fall back to attribute presence (#10278)" ) ;
2011-05-04 01:44:42 +00:00
jQuery ( "#text1" ) . prop ( "readOnly" , true ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . readOnly , true , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . prop ( "readOnly" ) , true , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . attr ( "readonly" ) , "readonly" , "Set readonly attribute" ) ;
2011-05-04 01:44:42 +00:00
jQuery ( "#text1" ) . prop ( "readOnly" , false ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . readOnly , false , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . prop ( "readOnly" ) , false , "Set readonly attribute" ) ;
equal ( jQuery ( "#text1" ) . attr ( "readonly" ) , undefined , "Set readonly attribute" ) ;
2011-05-04 01:44:42 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "maxlength" , "5" ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "name" ) . maxLength , 5 , "Set maxlength attribute" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "maxLength" , "10" ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "name" ) . maxLength , 10 , "Set maxlength attribute" ) ;
2011-04-23 21:07:31 +00:00
2011-07-09 18:41:58 +00:00
// HTML5 boolean attributes
var $text = jQuery ( "#text1" ) . attr ( {
"autofocus" : true ,
"required" : true
} ) ;
equal ( $text . attr ( "autofocus" ) , "autofocus" , "Set boolean attributes to the same name" ) ;
equal ( $text . attr ( "autofocus" , false ) . attr ( "autofocus" ) , undefined , "Setting autofocus attribute to false removes it" ) ;
equal ( $text . attr ( "required" ) , "required" , "Set boolean attributes to the same name" ) ;
equal ( $text . attr ( "required" , false ) . attr ( "required" ) , undefined , "Setting required attribute to false removes it" ) ;
var $details = jQuery ( "<details open></details>" ) . appendTo ( "#qunit-fixture" ) ;
equal ( $details . attr ( "open" ) , "open" , "open attribute presense indicates true" ) ;
equal ( $details . attr ( "open" , false ) . attr ( "open" ) , undefined , "Setting open attribute to false removes it" ) ;
2011-08-04 20:34:59 +00:00
$text . attr ( "data-something" , true ) ;
equal ( $text . attr ( "data-something" ) , "true" , "Set data attributes" ) ;
equal ( $text . data ( "something" ) , true , "Setting data attributes are not affected by boolean settings" ) ;
$text . attr ( "data-another" , false ) ;
equal ( $text . attr ( "data-another" ) , "false" , "Set data attributes" ) ;
equal ( $text . data ( "another" ) , false , "Setting data attributes are not affected by boolean settings" ) ;
equal ( $text . attr ( "aria-disabled" , false ) . attr ( "aria-disabled" ) , "false" , "Setting aria attributes are not affected by boolean settings" ) ;
2011-04-23 21:07:31 +00:00
$text . removeData ( "something" ) . removeData ( "another" ) . removeAttr ( "aria-disabled" ) ;
2011-05-05 16:52:04 +00:00
jQuery ( "#foo" ) . attr ( "contenteditable" , true ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#foo" ) . attr ( "contenteditable" ) , "true" , "Enumerated attributes are set properly" ) ;
2011-05-05 16:52:04 +00:00
2011-03-14 02:24:45 +00:00
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
2011-05-10 04:27:52 +00:00
textNode = document . createTextNode ( "some text" ) ,
obj = { } ;
2011-08-05 14:02:33 +00:00
2011-05-10 04:27:52 +00:00
jQuery . each ( [ commentNode , textNode , attributeNode ] , function ( i , elem ) {
var $elem = jQuery ( elem ) ;
$elem . attr ( "nonexisting" , "foo" ) ;
strictEqual ( $elem . attr ( "nonexisting" ) , undefined , "attr(name, value) works correctly on comment and text nodes (bug #7500)." ) ;
} ) ;
jQuery . each ( [ window , document , obj , "#firstp" ] , function ( i , elem ) {
var $elem = jQuery ( elem ) ;
strictEqual ( $elem . attr ( "nonexisting" ) , undefined , "attr works correctly for non existing attributes (bug #7500)." ) ;
equal ( $elem . attr ( "something" , "foo" ) . attr ( "something" ) , "foo" , "attr falls back to prop on unsupported arguments" ) ;
2011-03-14 02:24:45 +00:00
} ) ;
2010-11-13 13:39:28 +00:00
2011-04-11 20:33:29 +00:00
var table = jQuery ( "#table" ) . append ( "<tr><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr>" ) ,
td = table . find ( "td:first" ) ;
2009-05-16 15:10:24 +00:00
td . attr ( "rowspan" , "2" ) ;
2011-11-06 20:27:42 +00:00
equal ( td [ 0 ] . rowSpan , 2 , "Check rowspan is correctly set" ) ;
2009-05-16 15:10:24 +00:00
td . attr ( "colspan" , "2" ) ;
2011-11-06 20:27:42 +00:00
equal ( td [ 0 ] . colSpan , 2 , "Check colspan is correctly set" ) ;
2009-05-16 15:10:24 +00:00
table . attr ( "cellspacing" , "2" ) ;
2011-11-06 20:27:42 +00:00
equal ( table [ 0 ] . cellSpacing , "2" , "Check cellspacing is correctly set" ) ;
2009-05-16 15:10:24 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#area1" ) . attr ( "value" ) , "foobar" , "Value attribute retrieves the property for backwards compatibility." ) ;
2011-05-08 02:01:10 +00:00
2009-03-18 21:15:38 +00:00
// for #1070
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "someAttr" , "0" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#name" ) . attr ( "someAttr" ) , "0" , "Set attribute to a string of \"0\"" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "someAttr" , 0 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#name" ) . attr ( "someAttr" ) , "0" , "Set attribute to the number 0" ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#name" ) . attr ( "someAttr" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#name" ) . attr ( "someAttr" ) , "1" , "Set attribute to the number 1" ) ;
2009-03-18 21:15:38 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . attr ( "name" , "attrvalue" ) ;
2011-11-06 20:27:42 +00:00
equal ( j . attr ( "name" ) , "attrvalue" , "Check node,textnode,comment for attr" ) ;
2009-03-18 21:15:38 +00:00
j . removeAttr ( "name" ) ;
2011-03-25 14:40:46 +00:00
// Type
2011-04-11 20:33:29 +00:00
var type = jQuery ( "#check2" ) . attr ( "type" ) ;
2009-03-18 21:15:38 +00:00
var thrown = false ;
try {
2011-04-11 20:33:29 +00:00
jQuery ( "#check2" ) . attr ( "type" , "hidden" ) ;
2009-03-18 21:15:38 +00:00
} catch ( e ) {
thrown = true ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-11-06 20:27:42 +00:00
equal ( type , jQuery ( "#check2" ) . attr ( "type" ) , "Verify that you can't change the type of an input element" ) ;
2009-03-18 21:15:38 +00:00
var check = document . createElement ( "input" ) ;
2011-09-14 18:25:14 +00:00
thrown = true ;
2009-03-18 21:15:38 +00:00
try {
2011-04-11 20:33:29 +00:00
jQuery ( check ) . attr ( "type" , "checkbox" ) ;
2009-03-18 21:15:38 +00:00
} catch ( e ) {
thrown = false ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-11-06 20:27:42 +00:00
equal ( "checkbox" , jQuery ( check ) . attr ( "type" ) , "Verify that you can change the type of an input element that isn't in the DOM" ) ;
2009-05-02 21:14:38 +00:00
2011-09-14 18:25:14 +00:00
check = jQuery ( "<input />" ) ;
thrown = true ;
2009-03-18 21:15:38 +00:00
try {
2011-04-11 20:33:29 +00:00
check . attr ( "type" , "checkbox" ) ;
2009-03-18 21:15:38 +00:00
} catch ( e ) {
thrown = false ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-11-06 20:27:42 +00:00
equal ( "checkbox" , check . attr ( "type" ) , "Verify that you can change the type of an input element that isn't in the DOM" ) ;
2009-05-02 21:14:38 +00:00
2009-03-18 21:15:38 +00:00
var button = jQuery ( "#button" ) ;
2011-09-14 18:25:14 +00:00
thrown = false ;
2009-03-18 21:15:38 +00:00
try {
2011-04-11 20:33:29 +00:00
button . attr ( "type" , "submit" ) ;
2009-03-18 21:15:38 +00:00
} catch ( e ) {
thrown = true ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-11-06 20:27:42 +00:00
equal ( "button" , button . attr ( "type" ) , "Verify that you can't change the type of a button element" ) ;
2011-04-22 01:33:09 +00:00
var $radio = jQuery ( "<input>" , { "value" : "sup" , "type" : "radio" } ) . appendTo ( "#testForm" ) ;
2011-11-06 20:27:42 +00:00
equal ( $radio . val ( ) , "sup" , "Value is not reset when type is set after value on a radio" ) ;
2011-04-22 01:33:09 +00:00
2011-03-25 14:40:46 +00:00
// Setting attributes on svg elements (bug #3116)
2011-04-14 03:45:58 +00:00
var $svg = jQuery ( "<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' baseProfile='full' width='200' height='200'>"
2011-04-11 20:33:29 +00:00
+ "<circle cx='200' cy='200' r='150' />"
+ "</svg>" ) . appendTo ( "body" ) ;
2011-11-06 20:27:42 +00:00
equal ( $svg . attr ( "cx" , 100 ) . attr ( "cx" ) , "100" , "Set attribute on svg element" ) ;
2011-03-25 14:40:46 +00:00
$svg . remove ( ) ;
2011-12-06 20:25:38 +00:00
// undefined values are chainable
jQuery ( "#name" ) . attr ( "maxlength" , "5" ) . removeAttr ( "nonexisting" ) ;
equal ( typeof jQuery ( "#name" ) . attr ( "maxlength" , undefined ) , "object" , ".attr('attribute', undefined) is chainable (#5571)" ) ;
equal ( jQuery ( "#name" ) . attr ( "maxlength" , undefined ) . attr ( "maxlength" ) , "5" , ".attr('attribute', undefined) does not change value (#5571)" ) ;
equal ( jQuery ( "#name" ) . attr ( "nonexisting" , undefined ) . attr ( "nonexisting" ) , undefined , ".attr('attribute', undefined) does not create attribute (#5571)" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-09-15 17:23:26 +00:00
test ( "attr(jquery_method)" , function ( ) {
2010-12-30 06:34:48 +00:00
2009-09-15 17:23:26 +00:00
var $elem = jQuery ( "<div />" ) ,
2012-06-07 15:24:35 +00:00
elem = $elem [ 0 ] ,
2012-06-11 01:54:16 +00:00
expected = 2 ,
attrObj = { } ;
2012-06-07 15:24:35 +00:00
if ( jQuery . fn . width ) {
expected += 2 ;
attrObj . width = 10 ;
}
if ( jQuery . fn . offset ) {
expected += 2 ;
attrObj . offset = { top : 1 , left : 0 } ;
}
2012-06-11 01:54:16 +00:00
if ( jQuery . css ) {
expected += 3 ;
attrObj . css = { paddingLeft : 1 , paddingRight : 1 } ;
}
2012-06-07 15:24:35 +00:00
expect ( expected ) ;
2010-12-30 06:34:48 +00:00
// one at a time
2012-06-07 15:24:35 +00:00
$elem . attr ( { html : "foo" } , true ) ;
equal ( elem . innerHTML , "foo" , "attr(html)" ) ;
2010-12-30 06:34:48 +00:00
2012-06-07 15:24:35 +00:00
$elem . attr ( { text : "bar" } , true ) ;
equal ( elem . innerHTML , "bar" , "attr(text)" ) ;
2010-12-30 06:34:48 +00:00
2012-06-07 15:24:35 +00:00
// Multiple attributes
$elem . attr ( attrObj , true ) ;
2010-12-30 06:34:48 +00:00
2012-06-07 15:24:35 +00:00
if ( jQuery . fn . width ) {
equal ( elem . style . width , "10px" , "attr({width:})" ) ;
2012-06-05 20:38:18 +00:00
2012-06-07 15:24:35 +00:00
$elem . attr ( { height : 10 } , true ) ;
equal ( elem . style . height , "10px" , "attr(height)" ) ;
}
2012-06-05 20:38:18 +00:00
2012-06-07 15:24:35 +00:00
if ( jQuery . fn . offset ) {
equal ( elem . style . top , "1px" , "attr({offset:})" ) ;
2012-06-05 20:38:18 +00:00
2012-06-07 15:24:35 +00:00
$elem . attr ( { offset : { top : 1 , left : 1 } } , true ) ;
equal ( elem . style . left , "1px" , "attr(offset)" ) ;
2012-06-05 20:38:18 +00:00
}
2010-12-30 06:34:48 +00:00
2012-06-11 01:54:16 +00:00
if ( jQuery . css ) {
equal ( elem . style . paddingLeft , "1px" , "attr({css:})" ) ;
equal ( elem . style . paddingRight , "1px" , "attr({css:})" ) ;
$elem . attr ( { css : { color : "red" } } , true ) ;
ok ( /^(#ff0000|red)$/i . test ( elem . style . color ) , "attr(css)" ) ;
}
2009-09-15 17:23:26 +00:00
} ) ;
2012-04-15 21:52:48 +00:00
test ( "attr(String, Object) - Loaded via XML document" , function ( ) {
2012-05-30 17:46:50 +00:00
expect ( 2 ) ;
2012-04-15 21:52:48 +00:00
var xml = createDashboardXML ( ) ;
var titles = [ ] ;
jQuery ( "tab" , xml ) . each ( function ( ) {
titles . push ( jQuery ( this ) . attr ( "title" ) ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-04-15 21:52:48 +00:00
equal ( titles [ 0 ] , "Location" , "attr() in XML context: Check first title" ) ;
equal ( titles [ 1 ] , "Users" , "attr() in XML context: Check second title" ) ;
} ) ;
2009-03-18 21:15:38 +00:00
test ( "attr('tabindex')" , function ( ) {
2012-05-30 17:46:50 +00:00
expect ( 8 ) ;
2009-03-18 21:15:38 +00:00
// elements not natively tabbable
2012-05-30 18:16:27 +00:00
equal ( jQuery ( "#listWithTabIndex" ) . attr ( "tabindex" ) , "5" , "not natively tabbable, with tabindex set to 0" ) ;
2012-05-30 17:46:50 +00:00
equal ( jQuery ( "#divWithNoTabIndex" ) . attr ( "tabindex" ) , undefined , "not natively tabbable, no tabindex set" ) ;
2009-05-02 21:14:38 +00:00
2009-03-18 21:15:38 +00:00
// anchor with href
2012-05-30 17:46:50 +00:00
equal ( jQuery ( "#linkWithNoTabIndex" ) . attr ( "tabindex" ) , undefined , "anchor with href, no tabindex set" ) ;
2012-05-30 18:16:27 +00:00
equal ( jQuery ( "#linkWithTabIndex" ) . attr ( "tabindex" ) , "2" , "anchor with href, tabindex set to 2" ) ;
equal ( jQuery ( "#linkWithNegativeTabIndex" ) . attr ( "tabindex" ) , "-1" , "anchor with href, tabindex set to -1" ) ;
2009-03-18 21:15:38 +00:00
// anchor without href
2012-05-30 17:46:50 +00:00
equal ( jQuery ( "#linkWithNoHrefWithNoTabIndex" ) . attr ( "tabindex" ) , undefined , "anchor without href, no tabindex set" ) ;
2012-05-30 18:16:27 +00:00
equal ( jQuery ( "#linkWithNoHrefWithTabIndex" ) . attr ( "tabindex" ) , "1" , "anchor without href, tabindex set to 2" ) ;
equal ( jQuery ( "#linkWithNoHrefWithNegativeTabIndex" ) . attr ( "tabindex" ) , "-1" , "anchor without href, no tabindex set" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
test ( "attr('tabindex', value)" , function ( ) {
2012-05-30 17:46:50 +00:00
expect ( 9 ) ;
2009-03-18 21:15:38 +00:00
2011-04-11 20:33:29 +00:00
var element = jQuery ( "#divWithNoTabIndex" ) ;
2012-05-30 17:46:50 +00:00
equal ( element . attr ( "tabindex" ) , undefined , "start with no tabindex" ) ;
2009-03-18 21:15:38 +00:00
// set a positive string
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , "1" ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "1" , "set tabindex to 1 (string)" ) ;
2009-03-18 21:15:38 +00:00
// set a zero string
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , "0" ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "0" , "set tabindex to 0 (string)" ) ;
2009-03-18 21:15:38 +00:00
// set a negative string
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , "-1" ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "-1" , "set tabindex to -1 (string)" ) ;
2009-05-02 21:14:38 +00:00
2009-03-18 21:15:38 +00:00
// set a positive number
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , 1 ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "1" , "set tabindex to 1 (number)" ) ;
2009-03-18 21:15:38 +00:00
// set a zero number
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , 0 ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "0" , "set tabindex to 0 (number)" ) ;
2009-03-18 21:15:38 +00:00
// set a negative number
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , - 1 ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "-1" , "set tabindex to -1 (number)" ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
element = jQuery ( "#linkWithTabIndex" ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "2" , "start with tabindex 2" ) ;
2009-03-18 21:15:38 +00:00
2011-04-11 20:33:29 +00:00
element . attr ( "tabindex" , - 1 ) ;
2012-05-30 18:16:27 +00:00
equal ( element . attr ( "tabindex" ) , "-1" , "set negative tabindex" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2010-01-07 16:15:40 +00:00
test ( "removeAttr(String)" , function ( ) {
2012-03-05 17:54:44 +00:00
expect ( 10 ) ;
2011-10-17 20:45:27 +00:00
var $first ;
equal ( jQuery ( "#mark" ) . removeAttr ( "class" ) . attr ( "class" ) , undefined , "remove class" ) ;
2011-08-25 19:33:38 +00:00
equal ( jQuery ( "#form" ) . removeAttr ( "id" ) . attr ( "id" ) , undefined , "Remove id" ) ;
equal ( jQuery ( "#foo" ) . attr ( "style" , "position:absolute;" ) . removeAttr ( "style" ) . attr ( "style" ) , undefined , "Check removing style attribute" ) ;
equal ( jQuery ( "#form" ) . attr ( "style" , "position:absolute;" ) . removeAttr ( "style" ) . attr ( "style" ) , undefined , "Check removing style attribute on a form" ) ;
equal ( jQuery ( "<div style='position: absolute'></div>" ) . appendTo ( "#foo" ) . removeAttr ( "style" ) . prop ( "style" ) . cssText , "" , "Check removing style attribute (#9699 Webkit)" ) ;
2012-06-11 01:54:16 +00:00
equal ( jQuery ( "#fx-test-group" ) . attr ( "height" , "3px" ) . removeAttr ( "height" ) . get ( 0 ) . style . height , "1px" , "Removing height attribute has no effect on height set with style attribute" ) ;
2011-08-05 14:02:33 +00:00
2011-05-04 15:29:38 +00:00
jQuery ( "#check1" ) . removeAttr ( "checked" ) . prop ( "checked" , true ) . removeAttr ( "checked" ) ;
2011-08-25 19:33:38 +00:00
equal ( document . getElementById ( "check1" ) . checked , false , "removeAttr sets boolean properties to false" ) ;
2011-05-04 15:29:38 +00:00
jQuery ( "#text1" ) . prop ( "readOnly" , true ) . removeAttr ( "readonly" ) ;
2011-08-25 19:33:38 +00:00
equal ( document . getElementById ( "text1" ) . readOnly , false , "removeAttr sets boolean properties to false" ) ;
2011-10-06 21:17:51 +00:00
2012-03-05 17:54:44 +00:00
jQuery ( "#option2c" ) . removeAttr ( "selected" ) ;
equal ( jQuery ( "#option2d" ) . attr ( "selected" ) , "selected" , "Removing `selected` from an option that is not selected does not remove selected from the currently selected option (#10870)" ) ;
2011-10-06 21:17:51 +00:00
try {
2011-10-17 20:45:27 +00:00
$first = jQuery ( "#first" ) . attr ( "contenteditable" , "true" ) . removeAttr ( "contenteditable" ) ;
equal ( $first . attr ( 'contenteditable' ) , undefined , "Remove the contenteditable attribute" ) ;
2011-10-06 21:17:51 +00:00
} catch ( e ) {
ok ( false , "Removing contenteditable threw an error (#10429)" ) ;
}
2011-03-08 17:07:05 +00:00
} ) ;
2011-11-14 17:24:58 +00:00
test ( "removeAttr(Multi String, variable space width)" , function ( ) {
2011-11-13 08:10:21 +00:00
expect ( 8 ) ;
var div = jQuery ( "<div id='a' alt='b' title='c' rel='d'></div>" ) ,
tests = {
id : "a" ,
alt : "b" ,
title : "c" ,
rel : "d"
} ;
jQuery . each ( tests , function ( key , val ) {
equal ( div . attr ( key ) , val , "Attribute `" + key + "` exists, and has a value of `" + val + "`" ) ;
} ) ;
2011-11-14 17:24:58 +00:00
div . removeAttr ( "id alt title rel " ) ;
2011-11-13 08:10:21 +00:00
jQuery . each ( tests , function ( key , val ) {
equal ( div . attr ( key ) , undefined , "Attribute `" + key + "` was removed" ) ;
} ) ;
} ) ;
2011-05-04 04:31:01 +00:00
test ( "prop(String, Object)" , function ( ) {
2011-10-22 20:03:57 +00:00
expect ( 31 ) ;
2011-05-04 04:31:01 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . prop ( "value" ) , "Test" , "Check for value attribute" ) ;
equal ( jQuery ( "#text1" ) . prop ( "value" , "Test2" ) . prop ( "defaultValue" ) , "Test" , "Check for defaultValue attribute" ) ;
equal ( jQuery ( "#select2" ) . prop ( "selectedIndex" ) , 3 , "Check for selectedIndex attribute" ) ;
equal ( jQuery ( "#foo" ) . prop ( "nodeName" ) . toUpperCase ( ) , "DIV" , "Check for nodeName attribute" ) ;
equal ( jQuery ( "#foo" ) . prop ( "tagName" ) . toUpperCase ( ) , "DIV" , "Check for tagName attribute" ) ;
equal ( jQuery ( "<option/>" ) . prop ( "selected" ) , false , "Check selected attribute on disconnected element." ) ;
2011-05-04 04:31:01 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#listWithTabIndex" ) . prop ( "tabindex" ) , 5 , "Check retrieving tabindex" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#text1" ) . prop ( "readonly" , true ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . readOnly , true , "Check setting readOnly property with 'readonly'" ) ;
equal ( jQuery ( "#label-for" ) . prop ( "for" ) , "action" , "Check retrieving htmlFor" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#text1" ) . prop ( "class" , "test" ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . className , "test" , "Check setting className with 'class'" ) ;
equal ( jQuery ( "#text1" ) . prop ( "maxlength" ) , 30 , "Check retrieving maxLength" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#table" ) . prop ( "cellspacing" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . prop ( "cellSpacing" ) , "1" , "Check setting and retrieving cellSpacing" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#table" ) . prop ( "cellpadding" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . prop ( "cellPadding" ) , "1" , "Check setting and retrieving cellPadding" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#table" ) . prop ( "rowspan" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . prop ( "rowSpan" ) , 1 , "Check setting and retrieving rowSpan" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#table" ) . prop ( "colspan" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . prop ( "colSpan" ) , 1 , "Check setting and retrieving colSpan" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#table" ) . prop ( "usemap" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . prop ( "useMap" ) , 1 , "Check setting and retrieving useMap" ) ;
2011-05-04 04:31:01 +00:00
jQuery ( "#table" ) . prop ( "frameborder" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#table" ) . prop ( "frameBorder" ) , 1 , "Check setting and retrieving frameBorder" ) ;
2011-05-04 04:31:01 +00:00
QUnit . reset ( ) ;
2011-10-22 20:03:57 +00:00
var body = document . body ,
$body = jQuery ( body ) ;
2011-05-04 04:31:01 +00:00
ok ( $body . prop ( "nextSibling" ) === null , "Make sure a null expando returns null" ) ;
body . foo = "bar" ;
2011-11-06 20:27:42 +00:00
equal ( $body . prop ( "foo" ) , "bar" , "Make sure the expando is preferred over the dom attribute" ) ;
2011-05-04 04:31:01 +00:00
body . foo = undefined ;
ok ( $body . prop ( "foo" ) === undefined , "Make sure the expando is preferred over the dom attribute, even if undefined" ) ;
var select = document . createElement ( "select" ) , optgroup = document . createElement ( "optgroup" ) , option = document . createElement ( "option" ) ;
optgroup . appendChild ( option ) ;
select . appendChild ( optgroup ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( option ) . prop ( "selected" ) , true , "Make sure that a single option is selected, even when in an optgroup." ) ;
equal ( jQuery ( document ) . prop ( "nodeName" ) , "#document" , "prop works correctly on document nodes (bug #7451)." ) ;
2011-05-04 04:31:01 +00:00
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
textNode = document . createTextNode ( "some text" ) ,
obj = { } ;
jQuery . each ( [ document , attributeNode , commentNode , textNode , obj , "#firstp" ] , function ( i , ele ) {
strictEqual ( jQuery ( ele ) . prop ( "nonexisting" ) , undefined , "prop works correctly for non existing attributes (bug #7500)." ) ;
} ) ;
2011-10-22 20:03:57 +00:00
obj = { } ;
2011-05-04 04:31:01 +00:00
jQuery . each ( [ document , obj ] , function ( i , ele ) {
var $ele = jQuery ( ele ) ;
$ele . prop ( "nonexisting" , "foo" ) ;
equal ( $ele . prop ( "nonexisting" ) , "foo" , "prop(name, value) works correctly for non existing attributes (bug #7500)." ) ;
} ) ;
jQuery ( document ) . removeProp ( "nonexisting" ) ;
2011-10-22 20:03:57 +00:00
var $form = jQuery ( "#form" ) . prop ( "enctype" , "multipart/form-data" ) ;
equal ( $form . prop ( "enctype" ) , "multipart/form-data" , "Set the enctype of a form (encoding in IE6/7 #6743)" ) ;
2011-05-04 04:31:01 +00:00
} ) ;
2011-08-04 19:47:53 +00:00
test ( "prop('tabindex')" , function ( ) {
expect ( 8 ) ;
// elements not natively tabbable
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#listWithTabIndex" ) . prop ( "tabindex" ) , 5 , "not natively tabbable, with tabindex set to 0" ) ;
equal ( jQuery ( "#divWithNoTabIndex" ) . prop ( "tabindex" ) , undefined , "not natively tabbable, no tabindex set" ) ;
2011-08-04 19:47:53 +00:00
// anchor with href
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#linkWithNoTabIndex" ) . prop ( "tabindex" ) , 0 , "anchor with href, no tabindex set" ) ;
equal ( jQuery ( "#linkWithTabIndex" ) . prop ( "tabindex" ) , 2 , "anchor with href, tabindex set to 2" ) ;
equal ( jQuery ( "#linkWithNegativeTabIndex" ) . prop ( "tabindex" ) , - 1 , "anchor with href, tabindex set to -1" ) ;
2011-08-04 19:47:53 +00:00
// anchor without href
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#linkWithNoHrefWithNoTabIndex" ) . prop ( "tabindex" ) , undefined , "anchor without href, no tabindex set" ) ;
equal ( jQuery ( "#linkWithNoHrefWithTabIndex" ) . prop ( "tabindex" ) , 1 , "anchor without href, tabindex set to 2" ) ;
equal ( jQuery ( "#linkWithNoHrefWithNegativeTabIndex" ) . prop ( "tabindex" ) , - 1 , "anchor without href, no tabindex set" ) ;
2011-08-04 19:47:53 +00:00
} ) ;
test ( "prop('tabindex', value)" , function ( ) {
expect ( 9 ) ;
var element = jQuery ( "#divWithNoTabIndex" ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , undefined , "start with no tabindex" ) ;
2011-08-04 19:47:53 +00:00
// set a positive string
element . prop ( "tabindex" , "1" ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , 1 , "set tabindex to 1 (string)" ) ;
2011-08-04 19:47:53 +00:00
// set a zero string
element . prop ( "tabindex" , "0" ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , 0 , "set tabindex to 0 (string)" ) ;
2011-08-04 19:47:53 +00:00
// set a negative string
element . prop ( "tabindex" , "-1" ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , - 1 , "set tabindex to -1 (string)" ) ;
2011-08-04 19:47:53 +00:00
// set a positive number
element . prop ( "tabindex" , 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , 1 , "set tabindex to 1 (number)" ) ;
2011-08-04 19:47:53 +00:00
// set a zero number
element . prop ( "tabindex" , 0 ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , 0 , "set tabindex to 0 (number)" ) ;
2011-08-04 19:47:53 +00:00
// set a negative number
element . prop ( "tabindex" , - 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , - 1 , "set tabindex to -1 (number)" ) ;
2011-08-04 19:47:53 +00:00
element = jQuery ( "#linkWithTabIndex" ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , 2 , "start with tabindex 2" ) ;
2011-08-04 19:47:53 +00:00
element . prop ( "tabindex" , - 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( element . prop ( "tabindex" ) , - 1 , "set negative tabindex" ) ;
2011-08-04 19:47:53 +00:00
} ) ;
2011-03-08 17:07:05 +00:00
test ( "removeProp(String)" , function ( ) {
expect ( 6 ) ;
2010-11-13 13:39:28 +00:00
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
textNode = document . createTextNode ( "some text" ) ,
obj = { } ;
2011-03-08 17:07:05 +00:00
strictEqual ( jQuery ( "#firstp" ) . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) [ 0 ] . nonexisting , undefined , "removeprop works correctly on DOM element nodes" ) ;
2010-11-13 13:39:28 +00:00
2010-12-07 02:17:42 +00:00
jQuery . each ( [ document , obj ] , function ( i , ele ) {
2010-11-13 13:39:28 +00:00
var $ele = jQuery ( ele ) ;
2011-03-08 17:07:05 +00:00
$ele . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) ;
strictEqual ( ele . nonexisting , undefined , "removeProp works correctly on non DOM element nodes (bug #7500)." ) ;
2010-11-13 13:39:28 +00:00
} ) ;
2010-12-07 02:17:42 +00:00
jQuery . each ( [ commentNode , textNode , attributeNode ] , function ( i , ele ) {
2011-05-07 18:49:04 +00:00
var $ele = jQuery ( ele ) ;
2011-03-08 17:07:05 +00:00
$ele . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) ;
strictEqual ( ele . nonexisting , undefined , "removeProp works correctly on non DOM element nodes (bug #7500)." ) ;
2010-11-13 13:39:28 +00:00
} ) ;
2010-01-07 16:15:40 +00:00
} ) ;
2010-01-07 14:55:15 +00:00
test ( "val()" , function ( ) {
2012-06-11 11:59:34 +00:00
expect ( 20 + ( jQuery . fn . serialize ? 6 : 0 ) ) ;
2010-01-07 14:55:15 +00:00
2011-04-11 20:33:29 +00:00
document . getElementById ( "text1" ) . value = "bla" ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . val ( ) , "bla" , "Check for modified value of input element" ) ;
2010-01-07 14:55:15 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#text1" ) . val ( ) , "Test" , "Check for value of input element" ) ;
2010-01-07 14:55:15 +00:00
// ticket #1714 this caused a JS error in IE
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . val ( ) , "" , "Check a paragraph element to see if it has a value" ) ;
2010-01-07 14:55:15 +00:00
ok ( jQuery ( [ ] ) . val ( ) === undefined , "Check an empty jQuery object will return undefined from val" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select2" ) . val ( ) , "3" , "Call val() on a single=\"single\" select" ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#select3" ) . val ( ) , [ "1" , "2" ] , "Call val() on a multiple=\"multiple\" select" ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#option3c" ) . val ( ) , "2" , "Call val() on a option element with value" ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#option3a" ) . val ( ) , "" , "Call val() on a option element with empty value" ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#option3e" ) . val ( ) , "no value" , "Call val() on a option element with no value attribute" ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#option3a" ) . val ( ) , "" , "Call val() on a option element with no value attribute" ) ;
2010-01-07 14:55:15 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#select3" ) . val ( "" ) ;
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#select3" ) . val ( ) , [ "" ] , "Call val() on a multiple=\"multiple\" select" ) ;
2010-01-07 14:55:15 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#select4" ) . val ( ) , [ ] , "Call val() on multiple=\"multiple\" select with all disabled options" ) ;
2010-09-24 21:26:22 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#select4 optgroup" ) . add ( "#select4 > [disabled]" ) . attr ( "disabled" , false ) ;
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#select4" ) . val ( ) , [ "2" , "3" ] , "Call val() on multiple=\"multiple\" select with some disabled options" ) ;
2010-09-24 21:26:22 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#select4" ) . attr ( "disabled" , true ) ;
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#select4" ) . val ( ) , [ "2" , "3" ] , "Call val() on disabled multiple=\"multiple\" select" ) ;
2010-09-24 21:26:22 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select5" ) . val ( ) , "3" , "Check value on ambiguous select." ) ;
2010-09-28 15:36:28 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#select5" ) . val ( 1 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select5" ) . val ( ) , "1" , "Check value on ambiguous select." ) ;
2010-09-28 15:36:28 +00:00
2011-04-11 20:33:29 +00:00
jQuery ( "#select5" ) . val ( 3 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select5" ) . val ( ) , "3" , "Check value on ambiguous select." ) ;
2010-09-28 15:36:28 +00:00
2012-06-11 11:59:34 +00:00
if ( jQuery . fn . serialize ) {
var checks = jQuery ( "<input type='checkbox' name='test' value='1'/><input type='checkbox' name='test' value='2'/><input type='checkbox' name='test' value=''/><input type='checkbox' name='test'/>" ) . appendTo ( "#form" ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
deepEqual ( checks . serialize ( ) , "" , "Get unchecked values." ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
equal ( checks . eq ( 3 ) . val ( ) , "on" , "Make sure a value of 'on' is provided if none is specified." ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
checks . val ( [ "2" ] ) ;
deepEqual ( checks . serialize ( ) , "test=2" , "Get a single checked value." ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
checks . val ( [ "1" , "" ] ) ;
deepEqual ( checks . serialize ( ) , "test=1&test=" , "Get multiple checked values." ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
checks . val ( [ "" , "2" ] ) ;
deepEqual ( checks . serialize ( ) , "test=2&test=" , "Get multiple checked values." ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
checks . val ( [ "1" , "on" ] ) ;
deepEqual ( checks . serialize ( ) , "test=1&test=on" , "Get multiple checked values." ) ;
2010-01-07 14:55:15 +00:00
2012-06-11 11:59:34 +00:00
checks . remove ( ) ;
}
2011-04-17 22:15:20 +00:00
var $button = jQuery ( "<button value='foobar'>text</button>" ) . insertAfter ( "#button" ) ;
2011-11-06 20:27:42 +00:00
equal ( $button . val ( ) , "foobar" , "Value retrieval on a button does not return innerHTML" ) ;
equal ( $button . val ( "baz" ) . html ( ) , "text" , "Setting the value does not change innerHTML" ) ;
2011-08-05 14:02:33 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "<option/>" ) . val ( "test" ) . attr ( "value" ) , "test" , "Setting value sets the value attribute" ) ;
2010-01-07 14:55:15 +00:00
} ) ;
2011-08-05 14:02:33 +00:00
if ( "value" in document . createElement ( "meter" ) &&
2011-05-20 15:03:33 +00:00
"value" in document . createElement ( "progress" ) ) {
test ( "val() respects numbers without exception (Bug #9319)" , function ( ) {
expect ( 4 ) ;
var $meter = jQuery ( "<meter min='0' max='10' value='5.6'></meter>" ) ,
$progress = jQuery ( "<progress max='10' value='1.5'></progress>" ) ;
try {
equal ( typeof $meter . val ( ) , "number" , "meter, returns a number and does not throw exception" ) ;
equal ( $meter . val ( ) , $meter [ 0 ] . value , "meter, api matches host and does not throw exception" ) ;
equal ( typeof $progress . val ( ) , "number" , "progress, returns a number and does not throw exception" ) ;
equal ( $progress . val ( ) , $progress [ 0 ] . value , "progress, api matches host and does not throw exception" ) ;
} catch ( e ) { }
$meter . remove ( ) ;
$progress . remove ( ) ;
} ) ;
}
2010-01-07 14:55:15 +00:00
var testVal = function ( valueObj ) {
2010-08-21 02:32:34 +00:00
expect ( 8 ) ;
2010-01-07 14:55:15 +00:00
2011-04-12 23:32:18 +00:00
QUnit . reset ( ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#text1" ) . val ( valueObj ( "test" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . value , "test" , "Check for modified (via val(String)) value of input element" ) ;
2010-01-07 14:55:15 +00:00
2010-08-21 02:32:34 +00:00
jQuery ( "#text1" ) . val ( valueObj ( undefined ) ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . value , "" , "Check for modified (via val(undefined)) value of input element" ) ;
2010-08-21 02:32:34 +00:00
2010-01-07 14:55:15 +00:00
jQuery ( "#text1" ) . val ( valueObj ( 67 ) ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . value , "67" , "Check for modified (via val(Number)) value of input element" ) ;
2010-01-07 14:55:15 +00:00
2010-08-21 02:32:34 +00:00
jQuery ( "#text1" ) . val ( valueObj ( null ) ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . value , "" , "Check for modified (via val(null)) value of input element" ) ;
2010-08-21 02:32:34 +00:00
2011-04-12 23:32:18 +00:00
var $select1 = jQuery ( "#select1" ) ;
$select1 . val ( valueObj ( "3" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( $select1 . val ( ) , "3" , "Check for modified (via val(String)) value of select element" ) ;
2010-01-07 14:55:15 +00:00
2011-04-12 23:32:18 +00:00
$select1 . val ( valueObj ( 2 ) ) ;
2011-11-06 20:27:42 +00:00
equal ( $select1 . val ( ) , "2" , "Check for modified (via val(Number)) value of select element" ) ;
2010-01-07 14:55:15 +00:00
2011-04-12 23:32:18 +00:00
$select1 . append ( "<option value='4'>four</option>" ) ;
$select1 . val ( valueObj ( 4 ) ) ;
2011-11-06 20:27:42 +00:00
equal ( $select1 . val ( ) , "4" , "Should be possible to set the val() to a newly created option" ) ;
2010-01-07 14:55:15 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . val ( valueObj ( "asdf" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( j . val ( ) , "asdf" , "Check node,textnode,comment with val()" ) ;
2010-01-07 14:55:15 +00:00
j . removeAttr ( "value" ) ;
}
test ( "val(String/Number)" , function ( ) {
testVal ( bareObj ) ;
} ) ;
test ( "val(Function)" , function ( ) {
testVal ( functionReturningObj ) ;
2010-10-09 03:48:06 +00:00
} ) ;
test ( "val(Array of Numbers) (Bug #7123)" , function ( ) {
expect ( 4 ) ;
2011-04-11 20:33:29 +00:00
jQuery ( "#form" ) . append ( "<input type='checkbox' name='arrayTest' value='1' /><input type='checkbox' name='arrayTest' value='2' /><input type='checkbox' name='arrayTest' value='3' checked='checked' /><input type='checkbox' name='arrayTest' value='4' />" ) ;
var elements = jQuery ( "input[name=arrayTest]" ) . val ( [ 1 , 2 ] ) ;
2010-10-09 03:48:06 +00:00
ok ( elements [ 0 ] . checked , "First element was checked" ) ;
ok ( elements [ 1 ] . checked , "Second element was checked" ) ;
ok ( ! elements [ 2 ] . checked , "Third element was unchecked" ) ;
ok ( ! elements [ 3 ] . checked , "Fourth element remained unchecked" ) ;
2010-12-30 06:34:48 +00:00
2010-10-09 03:48:06 +00:00
elements . remove ( ) ;
} ) ;
2010-01-07 14:55:15 +00:00
2010-01-07 16:15:40 +00:00
test ( "val(Function) with incoming value" , function ( ) {
expect ( 10 ) ;
2011-04-22 01:33:09 +00:00
QUnit . reset ( ) ;
2010-01-07 16:15:40 +00:00
var oldVal = jQuery ( "#text1" ) . val ( ) ;
jQuery ( "#text1" ) . val ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , oldVal , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return "test" ;
} ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . value , "test" , "Check for modified (via val(String)) value of input element" ) ;
2010-01-07 16:15:40 +00:00
oldVal = jQuery ( "#text1" ) . val ( ) ;
jQuery ( "#text1" ) . val ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , oldVal , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return 67 ;
} ) ;
2011-11-06 20:27:42 +00:00
equal ( document . getElementById ( "text1" ) . value , "67" , "Check for modified (via val(Number)) value of input element" ) ;
2010-01-07 16:15:40 +00:00
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , oldVal , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return "3" ;
} ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select1" ) . val ( ) , "3" , "Check for modified (via val(String)) value of select element" ) ;
2010-01-07 16:15:40 +00:00
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , oldVal , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return 2 ;
} ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select1" ) . val ( ) , "2" , "Check for modified (via val(Number)) value of select element" ) ;
2010-01-07 16:15:40 +00:00
jQuery ( "#select1" ) . append ( "<option value='4'>four</option>" ) ;
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , oldVal , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return 4 ;
} ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select1" ) . val ( ) , "4" , "Should be possible to set the val() to a newly created option" ) ;
2010-01-07 16:15:40 +00:00
} ) ;
2011-02-10 22:50:02 +00:00
// testing if a form.reset() breaks a subsequent call to a select element's .val() (in IE only)
test ( "val(select) after form.reset() (Bug #2551)" , function ( ) {
expect ( 3 ) ;
2011-04-17 06:43:57 +00:00
jQuery ( "<form id='kk' name='kk'><select id='kkk'><option value='cf'>cf</option><option value='gf'>gf</option></select></form>" ) . appendTo ( "#qunit-fixture" ) ;
2011-02-10 22:50:02 +00:00
jQuery ( "#kkk" ) . val ( "gf" ) ;
document . kk . reset ( ) ;
equal ( jQuery ( "#kkk" ) [ 0 ] . value , "cf" , "Check value of select after form reset." ) ;
equal ( jQuery ( "#kkk" ) . val ( ) , "cf" , "Check value of select after form reset." ) ;
// re-verify the multi-select is not broken (after form.reset) by our fix for single-select
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#select3" ) . val ( ) , [ "1" , "2" ] , "Call val() on a multiple=\"multiple\" select" ) ;
2011-02-10 22:50:02 +00:00
jQuery ( "#kk" ) . remove ( ) ;
2011-08-05 14:02:33 +00:00
} ) ;
2011-02-10 22:50:02 +00:00
2009-12-10 04:57:19 +00:00
var testAddClass = function ( valueObj ) {
2011-06-19 22:58:47 +00:00
expect ( 9 ) ;
2009-03-18 21:15:38 +00:00
var div = jQuery ( "div" ) ;
2009-12-10 04:57:19 +00:00
div . addClass ( valueObj ( "test" ) ) ;
2009-03-18 21:15:38 +00:00
var pass = true ;
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
2011-06-08 00:54:11 +00:00
if ( ! ~ div . get ( i ) . className . indexOf ( "test" ) ) {
pass = false ;
}
2009-03-18 21:15:38 +00:00
}
ok ( pass , "Add Class" ) ;
// using contents will get regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-12-10 04:57:19 +00:00
j . addClass ( valueObj ( "asdf" ) ) ;
2009-03-18 21:15:38 +00:00
ok ( j . hasClass ( "asdf" ) , "Check node,textnode,comment for addClass" ) ;
2010-02-13 07:18:38 +00:00
div = jQuery ( "<div/>" ) ;
div . addClass ( valueObj ( "test" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( div . attr ( "class" ) , "test" , "Make sure there's no extra whitespace." ) ;
2010-02-13 07:18:38 +00:00
div . attr ( "class" , " foo" ) ;
div . addClass ( valueObj ( "test" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( div . attr ( "class" ) , "foo test" , "Make sure there's no extra whitespace." ) ;
2010-02-13 19:30:27 +00:00
div . attr ( "class" , "foo" ) ;
div . addClass ( valueObj ( "bar baz" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( div . attr ( "class" ) , "foo bar baz" , "Make sure there isn't too much trimming." ) ;
2011-08-05 14:02:33 +00:00
2011-06-19 22:58:47 +00:00
div . removeClass ( ) ;
2011-10-06 21:17:51 +00:00
div . addClass ( valueObj ( "foo" ) ) . addClass ( valueObj ( "foo" ) ) ;
2011-06-08 00:54:11 +00:00
equal ( div . attr ( "class" ) , "foo" , "Do not add the same class twice in separate calls." ) ;
2011-06-19 22:58:47 +00:00
div . addClass ( valueObj ( "fo" ) ) ;
equal ( div . attr ( "class" ) , "foo fo" , "Adding a similar class does not get interrupted." ) ;
div . removeClass ( ) . addClass ( "wrap2" ) ;
ok ( div . addClass ( "wrap" ) . hasClass ( "wrap" ) , "Can add similarly named classes" ) ;
div . removeClass ( ) ;
2011-06-08 00:54:11 +00:00
div . addClass ( valueObj ( "bar bar" ) ) ;
equal ( div . attr ( "class" ) , "bar" , "Do not add the same class twice in the same call." ) ;
2009-12-14 15:56:01 +00:00
} ;
2009-12-10 04:57:19 +00:00
test ( "addClass(String)" , function ( ) {
2009-12-10 05:15:49 +00:00
testAddClass ( bareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-12-10 04:57:19 +00:00
test ( "addClass(Function)" , function ( ) {
2009-12-10 05:15:49 +00:00
testAddClass ( functionReturningObj ) ;
2009-12-10 04:57:19 +00:00
} ) ;
2010-01-07 16:15:40 +00:00
test ( "addClass(Function) with incoming value" , function ( ) {
2011-08-05 14:02:33 +00:00
expect ( 48 ) ;
2010-01-07 16:15:40 +00:00
var div = jQuery ( "div" ) , old = div . map ( function ( ) {
2011-03-08 17:07:05 +00:00
return jQuery ( this ) . attr ( "class" ) || "" ;
2010-01-07 16:15:40 +00:00
} ) ;
2011-08-05 14:02:33 +00:00
2010-01-07 16:15:40 +00:00
div . addClass ( function ( i , val ) {
2011-03-08 17:07:05 +00:00
if ( this . id !== "_firebugConsole" ) {
2011-11-06 20:27:42 +00:00
equal ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
2010-03-23 16:12:16 +00:00
return "test" ;
}
2010-01-07 16:15:40 +00:00
} ) ;
var pass = true ;
2011-03-08 17:07:05 +00:00
for ( var i = 0 ; i < div . length ; i ++ ) {
if ( div . get ( i ) . className . indexOf ( "test" ) == - 1 ) pass = false ;
2010-01-07 16:15:40 +00:00
}
ok ( pass , "Add Class" ) ;
} ) ;
2009-12-10 04:57:19 +00:00
var testRemoveClass = function ( valueObj ) {
2010-02-02 02:33:58 +00:00
expect ( 7 ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
var $divs = jQuery ( "div" ) ;
2009-05-02 21:14:38 +00:00
2009-12-10 04:57:19 +00:00
$divs . addClass ( "test" ) . removeClass ( valueObj ( "test" ) ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
ok ( ! $divs . is ( ".test" ) , "Remove Class" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-11 20:33:29 +00:00
$divs = jQuery ( "div" ) ;
2009-03-18 21:15:38 +00:00
$divs . addClass ( "test" ) . addClass ( "foo" ) . addClass ( "bar" ) ;
2009-12-10 04:57:19 +00:00
$divs . removeClass ( valueObj ( "test" ) ) . removeClass ( valueObj ( "bar" ) ) . removeClass ( valueObj ( "foo" ) ) ;
2009-05-02 21:14:38 +00:00
2011-04-11 20:33:29 +00:00
ok ( ! $divs . is ( ".test,.bar,.foo" ) , "Remove multiple classes" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-11 20:33:29 +00:00
$divs = jQuery ( "div" ) ;
2009-03-18 21:15:38 +00:00
// Make sure that a null value doesn't cause problems
2009-12-10 04:57:19 +00:00
$divs . eq ( 0 ) . addClass ( "test" ) . removeClass ( valueObj ( null ) ) ;
2011-04-11 20:33:29 +00:00
ok ( $divs . eq ( 0 ) . is ( ".test" ) , "Null value passed to removeClass" ) ;
2009-05-02 21:14:38 +00:00
2009-12-10 04:57:19 +00:00
$divs . eq ( 0 ) . addClass ( "test" ) . removeClass ( valueObj ( "" ) ) ;
2011-04-11 20:33:29 +00:00
ok ( $divs . eq ( 0 ) . is ( ".test" ) , "Empty string passed to removeClass" ) ;
2009-03-18 21:15:38 +00:00
// using contents will get regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-12-10 04:57:19 +00:00
j . removeClass ( valueObj ( "asdf" ) ) ;
2009-03-18 21:15:38 +00:00
ok ( ! j . hasClass ( "asdf" ) , "Check node,textnode,comment for removeClass" ) ;
2010-02-02 02:33:58 +00:00
var div = document . createElement ( "div" ) ;
div . className = " test foo " ;
jQuery ( div ) . removeClass ( valueObj ( "foo" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( div . className , "test" , "Make sure remaining className is trimmed." ) ;
2010-02-02 02:33:58 +00:00
div . className = " test " ;
jQuery ( div ) . removeClass ( valueObj ( "test" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( div . className , "" , "Make sure there is nothing left after everything is removed." ) ;
2009-12-10 04:57:19 +00:00
} ;
test ( "removeClass(String) - simple" , function ( ) {
2009-12-10 05:15:49 +00:00
testRemoveClass ( bareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-12-10 04:57:19 +00:00
test ( "removeClass(Function) - simple" , function ( ) {
2009-12-10 05:15:49 +00:00
testRemoveClass ( functionReturningObj ) ;
2009-12-10 04:57:19 +00:00
} ) ;
2010-01-07 16:15:40 +00:00
test ( "removeClass(Function) with incoming value" , function ( ) {
2011-08-05 14:02:33 +00:00
expect ( 48 ) ;
2010-01-07 16:15:40 +00:00
2011-04-11 20:33:29 +00:00
var $divs = jQuery ( "div" ) . addClass ( "test" ) , old = $divs . map ( function ( ) {
2010-01-07 16:15:40 +00:00
return jQuery ( this ) . attr ( "class" ) ;
} ) ;
$divs . removeClass ( function ( i , val ) {
2010-03-23 16:12:16 +00:00
if ( this . id !== "_firebugConsole" ) {
2011-11-06 20:27:42 +00:00
equal ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
2010-03-23 16:12:16 +00:00
return "test" ;
}
2010-01-07 16:15:40 +00:00
} ) ;
2011-04-11 20:33:29 +00:00
ok ( ! $divs . is ( ".test" ) , "Remove Class" ) ;
2010-01-07 16:15:40 +00:00
2010-12-30 06:34:48 +00:00
QUnit . reset ( ) ;
2010-01-07 16:15:40 +00:00
} ) ;
2009-12-10 04:57:19 +00:00
var testToggleClass = function ( valueObj ) {
2009-05-02 22:35:39 +00:00
expect ( 17 ) ;
2009-05-02 21:14:38 +00:00
2009-03-18 21:15:38 +00:00
var e = jQuery ( "#firstp" ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "test" ) ) ;
2009-03-18 21:15:38 +00:00
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "test" ) ) ;
2009-03-18 21:15:38 +00:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-05-02 21:14:38 +00:00
// class name with a boolean
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "test" ) , false ) ;
2009-03-18 21:15:38 +00:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "test" ) , true ) ;
2009-03-18 21:15:38 +00:00
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "test" ) , false ) ;
2009-03-18 21:15:38 +00:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-05-02 21:14:38 +00:00
// multiple class names
e . addClass ( "testA testB" ) ;
ok ( ( e . is ( ".testA.testB" ) ) , "Assert 2 different classes present" ) ;
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "testB testC" ) ) ;
2009-05-02 21:14:38 +00:00
ok ( ( e . is ( ".testA.testC" ) && ! e . is ( ".testB" ) ) , "Assert 1 class added, 1 class removed, and 1 class kept" ) ;
2009-12-10 04:57:19 +00:00
e . toggleClass ( valueObj ( "testA testC" ) ) ;
2009-05-02 21:14:38 +00:00
ok ( ( ! e . is ( ".testA" ) && ! e . is ( ".testB" ) && ! e . is ( ".testC" ) ) , "Assert no class present" ) ;
// toggleClass storage
e . toggleClass ( true ) ;
2011-01-09 21:52:33 +00:00
ok ( e [ 0 ] . className === "" , "Assert class is empty (data was empty)" ) ;
2009-05-02 22:35:39 +00:00
e . addClass ( "testD testE" ) ;
ok ( e . is ( ".testD.testE" ) , "Assert class present" ) ;
2009-05-02 21:14:38 +00:00
e . toggleClass ( ) ;
2009-05-02 22:35:39 +00:00
ok ( ! e . is ( ".testD.testE" ) , "Assert class not present" ) ;
2011-04-11 20:33:29 +00:00
ok ( jQuery . _data ( e [ 0 ] , "__className__" ) === "testD testE" , "Assert data was stored" ) ;
2009-05-02 21:14:38 +00:00
e . toggleClass ( ) ;
2009-05-02 22:35:39 +00:00
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
2009-05-02 21:14:38 +00:00
e . toggleClass ( false ) ;
2009-05-02 22:35:39 +00:00
ok ( ! e . is ( ".testD.testE" ) , "Assert class not present" ) ;
2009-05-02 21:14:38 +00:00
e . toggleClass ( true ) ;
2009-05-02 22:35:39 +00:00
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
e . toggleClass ( ) ;
e . toggleClass ( false ) ;
e . toggleClass ( ) ;
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
2009-07-11 13:57:38 +00:00
2009-05-02 21:14:38 +00:00
// Cleanup
e . removeClass ( "testD" ) ;
2011-04-11 20:33:29 +00:00
jQuery . removeData ( e [ 0 ] , "__className__" , true ) ;
2009-12-10 04:57:19 +00:00
} ;
test ( "toggleClass(String|boolean|undefined[, boolean])" , function ( ) {
2009-12-10 05:15:49 +00:00
testToggleClass ( bareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-12-10 04:57:19 +00:00
test ( "toggleClass(Function[, boolean])" , function ( ) {
2009-12-10 05:15:49 +00:00
testToggleClass ( functionReturningObj ) ;
2009-12-10 04:57:19 +00:00
} ) ;
2010-01-07 16:15:40 +00:00
test ( "toggleClass(Fucntion[, boolean]) with incoming value" , function ( ) {
expect ( 14 ) ;
2009-12-10 04:57:19 +00:00
2011-06-19 22:58:47 +00:00
var e = jQuery ( "#firstp" ) , old = e . attr ( "class" ) || "" ;
2010-01-07 16:15:40 +00:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 06:34:48 +00:00
2010-01-07 16:15:40 +00:00
e . toggleClass ( function ( i , val ) {
2011-08-04 20:34:59 +00:00
equal ( old , val , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return "test" ;
} ) ;
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2010-12-30 06:34:48 +00:00
2010-01-07 16:15:40 +00:00
old = e . attr ( "class" ) ;
2010-12-30 06:34:48 +00:00
2010-01-07 16:15:40 +00:00
e . toggleClass ( function ( i , val ) {
2011-08-04 20:34:59 +00:00
equal ( old , val , "Make sure the incoming value is correct." ) ;
2010-01-07 16:15:40 +00:00
return "test" ;
} ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 06:34:48 +00:00
2011-08-04 20:34:59 +00:00
old = e . attr ( "class" ) || "" ;
2009-12-10 04:57:19 +00:00
2010-01-07 16:15:40 +00:00
// class name with a boolean
e . toggleClass ( function ( i , val , state ) {
2011-08-04 20:34:59 +00:00
equal ( old , val , "Make sure the incoming value is correct." ) ;
equal ( state , false , "Make sure that the state is passed in." ) ;
2010-01-07 16:15:40 +00:00
return "test" ;
} , false ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 06:34:48 +00:00
2011-08-04 20:34:59 +00:00
old = e . attr ( "class" ) || "" ;
2010-12-30 06:34:48 +00:00
2010-01-07 16:15:40 +00:00
e . toggleClass ( function ( i , val , state ) {
2011-08-04 20:34:59 +00:00
equal ( old , val , "Make sure the incoming value is correct." ) ;
equal ( state , true , "Make sure that the state is passed in." ) ;
2010-01-07 16:15:40 +00:00
return "test" ;
} , true ) ;
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2010-12-30 06:34:48 +00:00
2010-01-07 16:15:40 +00:00
old = e . attr ( "class" ) ;
2010-12-30 06:34:48 +00:00
2010-01-07 16:15:40 +00:00
e . toggleClass ( function ( i , val , state ) {
2011-08-04 20:34:59 +00:00
equal ( old , val , "Make sure the incoming value is correct." ) ;
equal ( state , false , "Make sure that the state is passed in." ) ;
2010-01-07 16:15:40 +00:00
return "test" ;
} , false ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
// Cleanup
e . removeClass ( "test" ) ;
2011-04-11 20:33:29 +00:00
jQuery . removeData ( e [ 0 ] , "__className__" , true ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-09-08 01:07:50 +00:00
test ( "addClass, removeClass, hasClass" , function ( ) {
2010-12-01 20:31:22 +00:00
expect ( 17 ) ;
2010-12-30 06:34:48 +00:00
2009-09-08 01:07:50 +00:00
var jq = jQuery ( "<p>Hi</p>" ) , x = jq [ 0 ] ;
2010-12-30 06:34:48 +00:00
2009-09-08 01:07:50 +00:00
jq . addClass ( "hi" ) ;
2011-11-06 20:27:42 +00:00
equal ( x . className , "hi" , "Check single added class" ) ;
2010-12-30 06:34:48 +00:00
2009-09-08 01:07:50 +00:00
jq . addClass ( "foo bar" ) ;
2011-11-06 20:27:42 +00:00
equal ( x . className , "hi foo bar" , "Check more added classes" ) ;
2010-12-30 06:34:48 +00:00
2009-09-08 01:07:50 +00:00
jq . removeClass ( ) ;
2011-11-06 20:27:42 +00:00
equal ( x . className , "" , "Remove all classes" ) ;
2010-12-30 06:34:48 +00:00
2009-09-08 01:07:50 +00:00
jq . addClass ( "hi foo bar" ) ;
jq . removeClass ( "foo" ) ;
2011-11-06 20:27:42 +00:00
equal ( x . className , "hi bar" , "Check removal of one class" ) ;
2010-12-30 06:34:48 +00:00
2009-09-08 01:07:50 +00:00
ok ( jq . hasClass ( "hi" ) , "Check has1" ) ;
ok ( jq . hasClass ( "bar" ) , "Check has2" ) ;
2010-12-30 06:34:48 +00:00
2010-12-01 20:31:22 +00:00
var jq = jQuery ( "<p class='class1\nclass2\tcla.ss3\n\rclass4'></p>" ) ;
ok ( jq . hasClass ( "class1" ) , "Check hasClass with line feed" ) ;
ok ( jq . is ( ".class1" ) , "Check is with line feed" ) ;
2009-12-14 21:24:28 +00:00
ok ( jq . hasClass ( "class2" ) , "Check hasClass with tab" ) ;
ok ( jq . is ( ".class2" ) , "Check is with tab" ) ;
ok ( jq . hasClass ( "cla.ss3" ) , "Check hasClass with dot" ) ;
2010-12-01 20:31:22 +00:00
ok ( jq . hasClass ( "class4" ) , "Check hasClass with carriage return" ) ;
ok ( jq . is ( ".class4" ) , "Check is with carriage return" ) ;
2010-12-30 06:34:48 +00:00
2009-12-14 21:24:28 +00:00
jq . removeClass ( "class2" ) ;
ok ( jq . hasClass ( "class2" ) == false , "Check the class has been properly removed" ) ;
jq . removeClass ( "cla" ) ;
ok ( jq . hasClass ( "cla.ss3" ) , "Check the dotted class has not been removed" ) ;
jq . removeClass ( "cla.ss3" ) ;
ok ( jq . hasClass ( "cla.ss3" ) == false , "Check the dotted class has been removed" ) ;
2010-12-01 20:31:22 +00:00
jq . removeClass ( "class4" ) ;
ok ( jq . hasClass ( "class4" ) == false , "Check the class has been properly removed" ) ;
2011-05-04 01:44:42 +00:00
} ) ;
2011-06-21 18:04:06 +00:00
test ( "contents().hasClass() returns correct values" , function ( ) {
expect ( 2 ) ;
2011-08-05 14:02:33 +00:00
var $div = jQuery ( "<div><span class='foo'></span><!-- comment -->text</div>" ) ,
2011-06-21 18:04:06 +00:00
$contents = $div . contents ( ) ;
ok ( $contents . hasClass ( "foo" ) , "Found 'foo' in $contents" ) ;
2011-06-22 12:50:44 +00:00
ok ( ! $contents . hasClass ( "undefined" ) , "Did not find 'undefined' in $contents (correctly)" ) ;
2011-06-21 18:04:06 +00:00
} ) ;
2012-02-25 20:05:15 +00:00
test ( "coords returns correct values in IE6/IE7, see #10828" , function ( ) {
expect ( 2 ) ;
var map = jQuery ( "<map />" ) ,
area ;
area = map . html ( "<area shape='rect' coords='0,0,0,0' href='#' alt='a' />" ) . find ( "area" ) ;
equal ( area . attr ( "coords" ) , "0,0,0,0" , "did not retrieve coords correctly" ) ;
area = map . html ( "<area shape='rect' href='#' alt='a' /></map>" ) . find ( "area" ) ;
equal ( area . attr ( "coords" ) , undefined , "did not retrieve coords correctly" ) ;
} ) ;
2012-04-02 22:37:02 +00:00
test ( "Handle cased attributes on XML DOM correctly in removeAttr()" , function ( ) {
expect ( 1 ) ;
var xmlStr = "<root><item fooBar='123' /></root>" ,
$xmlDoc = jQuery ( jQuery . parseXML ( xmlStr ) ) ,
$item = $xmlDoc . find ( "item" ) ,
el = $item [ 0 ] ;
$item . removeAttr ( "fooBar" ) ;
equal ( el . attributes . length , 0 , "attribute with upper case did not get removed" ) ;
} ) ;