2011-01-09 22:58:47 +01:00
module ( "attributes" , { teardown : moduleTeardown } ) ;
2009-04-20 19:05:18 +02:00
2009-12-10 05:57:19 +01:00
var bareObj = function ( value ) { return value ; } ;
var functionReturningObj = function ( value ) { return ( function ( ) { return value ; } ) ; } ;
2011-03-14 02:27:45 +01:00
2011-05-04 06:31:01 +02:00
test ( "jQuery.attrFix/jQuery.propFix integrity test" , function ( ) {
expect ( 2 ) ;
2011-03-25 06:46:29 +01: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 06:31:01 +02:00
var props = {
2011-03-25 06:46:29 +01:00
tabindex : "tabIndex" ,
2011-04-04 00:18:32 +02:00
readonly : "readOnly" ,
2011-03-14 02:27:45 +01:00
"for" : "htmlFor" ,
"class" : "className" ,
maxlength : "maxLength" ,
cellspacing : "cellSpacing" ,
2011-04-15 05:11:49 +02:00
cellpadding : "cellPadding" ,
2011-03-14 02:27:45 +01:00
rowspan : "rowSpan" ,
colspan : "colSpan" ,
usemap : "useMap" ,
2011-05-05 18:52:04 +02:00
frameborder : "frameBorder" ,
contenteditable : "contentEditable"
2011-05-04 06:31:01 +02:00
} ,
propsShouldBe ;
if ( ! jQuery . support . getSetAttribute ) {
propsShouldBe = props ;
2011-03-25 06:46:29 +01:00
} else {
propsShouldBe = {
2011-05-04 03:44:42 +02:00
tabindex : "tabIndex"
2011-03-25 06:46:29 +01:00
} ;
}
2011-03-14 02:27:45 +01:00
2011-05-04 06:31:01 +02:00
deepEqual ( propsShouldBe , jQuery . attrFix , "jQuery.attrFix passes integrity check" ) ;
deepEqual ( props , jQuery . propFix , "jQuery.propFix passes integrity check" ) ;
2010-11-09 22:31:52 +01:00
} ) ;
2009-03-18 22:15:38 +01:00
test ( "attr(String)" , function ( ) {
2011-05-01 23:09:50 +02:00
expect ( 37 ) ;
2010-12-30 07:34:48 +01:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#text1" ) . attr ( "type" ) , "text" , "Check for type attribute" ) ;
equals ( jQuery ( "#radio1" ) . attr ( "type" ) , "radio" , "Check for type attribute" ) ;
equals ( jQuery ( "#check1" ) . attr ( "type" ) , "checkbox" , "Check for type attribute" ) ;
equals ( jQuery ( "#simon1" ) . attr ( "rel" ) , "bookmark" , "Check for rel attribute" ) ;
equals ( jQuery ( "#google" ) . attr ( "title" ) , "Google!" , "Check for title attribute" ) ;
equals ( jQuery ( "#mark" ) . attr ( "hreflang" ) , "en" , "Check for hreflang attribute" ) ;
equals ( jQuery ( "#en" ) . attr ( "lang" ) , "en" , "Check for lang attribute" ) ;
equals ( jQuery ( "#simon" ) . attr ( "class" ) , "blog link" , "Check for class attribute" ) ;
equals ( jQuery ( "#name" ) . attr ( "name" ) , "name" , "Check for name attribute" ) ;
equals ( jQuery ( "#text1" ) . attr ( "name" ) , "action" , "Check for name attribute" ) ;
ok ( jQuery ( "#form" ) . attr ( "action" ) . indexOf ( "formaction" ) >= 0 , "Check for action attribute" ) ;
2011-04-19 19:17:38 +02:00
equals ( jQuery ( "#text1" ) . attr ( "value" , "t" ) . attr ( "value" ) , "t" , "Check setting the value attribute" ) ;
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#form" ) . attr ( "blah" , "blah" ) . attr ( "blah" ) , "blah" , "Set non-existant attribute on a form" ) ;
equals ( jQuery ( "#foo" ) . attr ( "height" ) , undefined , "Non existent height attribute should return undefined" ) ;
2011-03-25 07:07:15 +01:00
2011-03-25 05:35:50 +01:00
// [7472] & [3113] (form contains an input with name="action" or name="id")
2011-04-11 22:33:29 +02:00
var extras = jQuery ( "<input name='id' name='name' /><input id='target' name='target' />" ) . appendTo ( "#testForm" ) ;
equals ( jQuery ( "#form" ) . attr ( "action" , "newformaction" ) . attr ( "action" ) , "newformaction" , "Check that action attribute was changed" ) ;
equals ( jQuery ( "#testForm" ) . attr ( "target" ) , undefined , "Retrieving target does not equal the input with name=target" ) ;
equals ( jQuery ( "#testForm" ) . attr ( "target" , "newTarget" ) . attr ( "target" ) , "newTarget" , "Set target successfully on a form" ) ;
equals ( 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 07:07:15 +01:00
// Bug #3685 (form contains input with name="name")
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#testForm" ) . attr ( "name" ) , undefined , "Retrieving name does not retrieve input with name=name" ) ;
2011-03-25 07:07:15 +01:00
extras . remove ( ) ;
2011-03-25 05:35:50 +01:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#text1" ) . attr ( "maxlength" ) , "30" , "Check for maxlength attribute" ) ;
equals ( jQuery ( "#text1" ) . attr ( "maxLength" ) , "30" , "Check for maxLength attribute" ) ;
equals ( jQuery ( "#area1" ) . attr ( "maxLength" ) , "30" , "Check for maxLength attribute" ) ;
2009-03-18 22:15:38 +01:00
2010-08-26 18:36:50 +02:00
// using innerHTML in IE causes href attribute to be serialized to the full path
2011-04-17 08:43:57 +02:00
jQuery ( "<a/>" ) . attr ( { "id" : "tAnchor5" , "href" : "#5" } ) . appendTo ( "#qunit-fixture" ) ;
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#tAnchor5" ) . attr ( "href" ) , "#5" , "Check for non-absolute href (an anchor)" ) ;
2009-03-18 22:15:38 +01:00
2011-04-02 03:38:54 +02:00
// list attribute is readonly by default in browsers that support it
2011-04-11 22:33:29 +02:00
jQuery ( "#list-test" ) . attr ( "list" , "datalist" ) ;
equals ( jQuery ( "#list-test" ) . attr ( "list" ) , "datalist" , "Check setting list attribute" ) ;
2011-04-02 03:38:54 +02:00
2009-03-18 22:15:38 +01:00
// Related to [5574] and [5683]
var body = document . body , $body = jQuery ( body ) ;
2011-04-11 22:33:29 +02:00
strictEqual ( $body . attr ( "foo" ) , undefined , "Make sure that a non existent attribute returns undefined" ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
body . setAttribute ( "foo" , "baz" ) ;
equals ( $body . attr ( "foo" ) , "baz" , "Make sure the dom attribute is retrieved when no expando is found" ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
$body . attr ( "foo" , "cool" ) ;
equals ( $body . attr ( "foo" ) , "cool" , "Make sure that setting works well when both expando and dom attribute are available" ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
body . removeAttribute ( "foo" ) ; // Cleanup
2009-12-22 21:02:52 +01:00
2011-04-11 22:33:29 +02: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" ) ;
equals ( $img . attr ( "width" ) , "215" , "Retrieve width attribute an an element with display:none." ) ;
equals ( $img . attr ( "height" ) , "53" , "Retrieve height attribute an an element with display:none." ) ;
2011-04-02 03:13:01 +02:00
2011-03-30 03:49:37 +02:00
// Check for style support
2011-04-11 22:33:29 +02: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 03:13:01 +02:00
2011-04-18 00:15:20 +02:00
// Check value on button element (#1954)
var $button = jQuery ( "<button value='foobar'>text</button>" ) . insertAfter ( "#button" ) ;
equals ( $button . attr ( "value" ) , "foobar" , "Value retrieval on a button does not return innerHTML" ) ;
equals ( $button . attr ( "value" , "baz" ) . html ( ) , "text" , "Setting the value does not change innerHTML" ) ;
2011-05-01 23:09:50 +02:00
// Attributes with a colon on a table element (#1591)
equals ( jQuery ( "#table" ) . attr ( "test:attrib" ) , undefined , "Retrieving a non-existent attribute on a table with a colon does not throw an error." ) ;
equals ( 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-04-02 03:13:01 +02:00
ok ( jQuery ( "<div/>" ) . attr ( "doesntexist" ) === undefined , "Make sure undefined is returned when no attribute is found." ) ;
ok ( jQuery ( ) . attr ( "doesntexist" ) === undefined , "Make sure undefined is returned when no element is there." ) ;
2009-03-18 22:15:38 +01:00
} ) ;
if ( ! isLocal ) {
test ( "attr(String) in XML Files" , function ( ) {
expect ( 2 ) ;
stop ( ) ;
jQuery . get ( "data/dashboard.xml" , function ( xml ) {
equals ( jQuery ( "locations" , xml ) . attr ( "class" ) , "foo" , "Check class attribute in XML document" ) ;
equals ( jQuery ( "location" , xml ) . attr ( "for" ) , "bar" , "Check for attribute in XML document" ) ;
start ( ) ;
} ) ;
} ) ;
}
test ( "attr(String, Function)" , function ( ) {
expect ( 2 ) ;
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#text1" ) . attr ( "value" , function ( ) { return this . id ; } ) [ 0 ] . value , "text1" , "Set value from id" ) ;
equals ( jQuery ( "#text1" ) . attr ( "title" , function ( i ) { return i ; } ) . attr ( "title" ) , "0" , "Set value with an index" ) ;
2009-03-18 22:15:38 +01:00
} ) ;
test ( "attr(Hash)" , function ( ) {
2009-07-11 15:57:38 +02:00
expect ( 3 ) ;
2009-03-18 22:15:38 +01:00
var pass = true ;
2011-04-11 22:33:29 +02:00
jQuery ( "div" ) . attr ( { foo : "baz" , zoo : "ping" } ) . each ( function ( ) {
if ( this . getAttribute ( "foo" ) != "baz" && this . getAttribute ( "zoo" ) != "ping" ) pass = false ;
2009-03-18 22:15:38 +01:00
} ) ;
ok ( pass , "Set Multiple Attributes" ) ;
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#text1" ) . attr ( { value : function ( ) { return this . id ; } } ) [ 0 ] . value , "text1" , "Set attribute to computed value #1" ) ;
equals ( jQuery ( "#text1" ) . attr ( { title : function ( i ) { return i ; } } ) . attr ( "title" ) , "0" , "Set attribute to computed value #2" ) ;
2009-07-11 15:57:38 +02:00
2009-03-18 22:15:38 +01:00
} ) ;
test ( "attr(String, Object)" , function ( ) {
2011-05-05 18:52:04 +02:00
expect ( 57 ) ;
2010-09-28 17:12:13 +02:00
2009-03-18 22:15:38 +01:00
var div = jQuery ( "div" ) . attr ( "foo" , "bar" ) ,
fail = false ;
2010-09-28 17:12:13 +02:00
2009-03-18 22:15:38 +01:00
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
2011-04-11 22:33:29 +02:00
if ( div . get ( i ) . getAttribute ( "foo" ) != "bar" ) {
2009-03-18 22:15:38 +01:00
fail = i ;
break ;
}
}
2010-09-28 17:12:13 +02:00
2011-04-23 23:07:31 +02:00
equals ( fail , false , "Set Attribute, the #" + fail + " element didn't get the attribute 'foo'" ) ;
2009-03-18 22:15:38 +01:00
2011-05-04 06:31:01 +02:00
ok ( jQuery ( "#foo" ) . attr ( { "width" : null } ) , "Try to set an attribute to nothing" ) ;
2009-03-18 22:15:38 +01:00
2011-04-11 22:33:29 +02:00
jQuery ( "#name" ) . attr ( "name" , "something" ) ;
equals ( jQuery ( "#name" ) . attr ( "name" ) , "something" , "Set name attribute" ) ;
jQuery ( "#name" ) . attr ( "name" , null ) ;
equals ( jQuery ( "#name" ) . attr ( "name" ) , undefined , "Remove name attribute" ) ;
2011-05-04 21:53:00 +02:00
jQuery ( "#check2" ) . prop ( "checked" , true ) . prop ( "checked" , false ) . attr ( "checked" , true ) ;
2011-04-11 22:33:29 +02:00
equals ( document . getElementById ( "check2" ) . checked , true , "Set checked attribute" ) ;
2011-05-04 03:44:42 +02:00
equals ( jQuery ( "#check2" ) . prop ( "checked" ) , true , "Set checked attribute" ) ;
equals ( jQuery ( "#check2" ) . attr ( "checked" ) , "checked" , "Set checked attribute" ) ;
2011-04-11 22:33:29 +02:00
jQuery ( "#check2" ) . attr ( "checked" , false ) ;
equals ( document . getElementById ( "check2" ) . checked , false , "Set checked attribute" ) ;
2011-05-04 03:44:42 +02:00
equals ( jQuery ( "#check2" ) . prop ( "checked" ) , false , "Set checked attribute" ) ;
equals ( jQuery ( "#check2" ) . attr ( "checked" ) , undefined , "Set checked attribute" ) ;
2011-04-11 22:33:29 +02:00
jQuery ( "#text1" ) . attr ( "readonly" , true ) ;
equals ( document . getElementById ( "text1" ) . readOnly , true , "Set readonly attribute" ) ;
2011-05-04 03:44:42 +02:00
equals ( jQuery ( "#text1" ) . prop ( "readOnly" ) , true , "Set readonly attribute" ) ;
equals ( jQuery ( "#text1" ) . attr ( "readonly" ) , "readonly" , "Set readonly attribute" ) ;
2011-04-11 22:33:29 +02:00
jQuery ( "#text1" ) . attr ( "readonly" , false ) ;
equals ( document . getElementById ( "text1" ) . readOnly , false , "Set readonly attribute" ) ;
2011-05-04 03:44:42 +02:00
equals ( jQuery ( "#text1" ) . prop ( "readOnly" ) , false , "Set readonly attribute" ) ;
equals ( jQuery ( "#text1" ) . attr ( "readonly" ) , undefined , "Set readonly attribute" ) ;
jQuery ( "#check2" ) . prop ( "checked" , true ) ;
equals ( document . getElementById ( "check2" ) . checked , true , "Set checked attribute" ) ;
equals ( jQuery ( "#check2" ) . prop ( "checked" ) , true , "Set checked attribute" ) ;
equals ( jQuery ( "#check2" ) . attr ( "checked" ) , "checked" , "Set checked attribute" ) ;
jQuery ( "#check2" ) . prop ( "checked" , false ) ;
equals ( document . getElementById ( "check2" ) . checked , false , "Set checked attribute" ) ;
equals ( jQuery ( "#check2" ) . prop ( "checked" ) , false , "Set checked attribute" ) ;
equals ( jQuery ( "#check2" ) . attr ( "checked" ) , undefined , "Set checked attribute" ) ;
2011-05-04 06:31:01 +02:00
2011-05-04 03:44:42 +02:00
jQuery ( "#text1" ) . prop ( "readOnly" , true ) ;
equals ( document . getElementById ( "text1" ) . readOnly , true , "Set readonly attribute" ) ;
equals ( jQuery ( "#text1" ) . prop ( "readOnly" ) , true , "Set readonly attribute" ) ;
equals ( jQuery ( "#text1" ) . attr ( "readonly" ) , "readonly" , "Set readonly attribute" ) ;
jQuery ( "#text1" ) . prop ( "readOnly" , false ) ;
equals ( document . getElementById ( "text1" ) . readOnly , false , "Set readonly attribute" ) ;
equals ( jQuery ( "#text1" ) . prop ( "readOnly" ) , false , "Set readonly attribute" ) ;
equals ( jQuery ( "#text1" ) . attr ( "readonly" ) , undefined , "Set readonly attribute" ) ;
2011-04-11 22:33:29 +02:00
jQuery ( "#name" ) . attr ( "maxlength" , "5" ) ;
equals ( document . getElementById ( "name" ) . maxLength , 5 , "Set maxlength attribute" ) ;
jQuery ( "#name" ) . attr ( "maxLength" , "10" ) ;
equals ( document . getElementById ( "name" ) . maxLength , 10 , "Set maxlength attribute" ) ;
var $p = jQuery ( "#firstp" ) . attr ( "nonexisting" , "foo" ) ;
equals ( $p . attr ( "nonexisting" ) , "foo" , "attr(name, value) works correctly for non existing attributes (bug #7500)." ) ;
$p . removeAttr ( "nonexisting" ) ;
2011-04-23 23:07:31 +02:00
var $text = jQuery ( "#text1" ) . attr ( "autofocus" , true ) ;
equals ( $text . attr ( "autofocus" ) , "autofocus" , "Set boolean attributes to the same name" ) ;
equals ( $text . attr ( "autofocus" , false ) . attr ( "autofocus" ) , undefined , "Setting autofocus attribute to false removes it" ) ;
equals ( $text . attr ( "data-something" , true ) . data ( "something" ) , true , "Setting data attributes are not affected by boolean settings" ) ;
equals ( $text . attr ( "data-another" , false ) . data ( "another" ) , false , "Setting data attributes are not affected by boolean settings" ) ;
equals ( $text . attr ( "aria-disabled" , false ) . attr ( "aria-disabled" ) , "false" , "Setting aria attributes are not affected by boolean settings" ) ;
$text . removeData ( "something" ) . removeData ( "another" ) . removeAttr ( "aria-disabled" ) ;
2011-05-05 18:52:04 +02:00
jQuery ( "#foo" ) . attr ( "contenteditable" , true ) ;
equals ( jQuery ( "#foo" ) . attr ( "contenteditable" ) , "true" , "Enumerated attributes are set properly" ) ;
2011-03-14 03:24:45 +01:00
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
textNode = document . createTextNode ( "some text" ) ;
jQuery . each ( [ commentNode , textNode , attributeNode ] , function ( i , ele ) {
var $ele = jQuery ( ele ) ;
$ele . attr ( "nonexisting" , "foo" ) ;
strictEqual ( $ele . attr ( "nonexisting" ) , undefined , "attr(name, value) works correctly on comment and text nodes (bug #7500)." ) ;
} ) ;
2010-11-13 14:39:28 +01:00
2011-04-11 22:33:29 +02: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 17:10:24 +02:00
td . attr ( "rowspan" , "2" ) ;
equals ( td [ 0 ] . rowSpan , 2 , "Check rowspan is correctly set" ) ;
td . attr ( "colspan" , "2" ) ;
equals ( td [ 0 ] . colSpan , 2 , "Check colspan is correctly set" ) ;
table . attr ( "cellspacing" , "2" ) ;
2011-03-26 02:13:25 +01:00
equals ( table [ 0 ] . cellSpacing , "2" , "Check cellspacing is correctly set" ) ;
2009-05-16 17:10:24 +02:00
2009-03-18 22:15:38 +01:00
// for #1070
2011-04-11 22:33:29 +02:00
jQuery ( "#name" ) . attr ( "someAttr" , "0" ) ;
equals ( jQuery ( "#name" ) . attr ( "someAttr" ) , "0" , "Set attribute to a string of \"0\"" ) ;
jQuery ( "#name" ) . attr ( "someAttr" , 0 ) ;
equals ( jQuery ( "#name" ) . attr ( "someAttr" ) , "0" , "Set attribute to the number 0" ) ;
jQuery ( "#name" ) . attr ( "someAttr" , 1 ) ;
equals ( jQuery ( "#name" ) . attr ( "someAttr" ) , "1" , "Set attribute to the number 1" ) ;
2009-03-18 22:15:38 +01:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . attr ( "name" , "attrvalue" ) ;
equals ( j . attr ( "name" ) , "attrvalue" , "Check node,textnode,comment for attr" ) ;
j . removeAttr ( "name" ) ;
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2011-03-25 15:40:46 +01:00
// Type
2011-04-11 22:33:29 +02:00
var type = jQuery ( "#check2" ) . attr ( "type" ) ;
2009-03-18 22:15:38 +01:00
var thrown = false ;
try {
2011-04-11 22:33:29 +02:00
jQuery ( "#check2" ) . attr ( "type" , "hidden" ) ;
2009-03-18 22:15:38 +01:00
} catch ( e ) {
thrown = true ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-04-11 22:33:29 +02:00
equals ( type , jQuery ( "#check2" ) . attr ( "type" ) , "Verify that you can't change the type of an input element" ) ;
2009-03-18 22:15:38 +01:00
var check = document . createElement ( "input" ) ;
var thrown = true ;
try {
2011-04-11 22:33:29 +02:00
jQuery ( check ) . attr ( "type" , "checkbox" ) ;
2009-03-18 22:15:38 +01:00
} catch ( e ) {
thrown = false ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-04-11 22:33:29 +02:00
equals ( "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 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var check = jQuery ( "<input />" ) ;
var thrown = true ;
try {
2011-04-11 22:33:29 +02:00
check . attr ( "type" , "checkbox" ) ;
2009-03-18 22:15:38 +01:00
} catch ( e ) {
thrown = false ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-04-11 22:33:29 +02:00
equals ( "checkbox" , check . attr ( "type" ) , "Verify that you can change the type of an input element that isn't in the DOM" ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var button = jQuery ( "#button" ) ;
var thrown = false ;
try {
2011-04-11 22:33:29 +02:00
button . attr ( "type" , "submit" ) ;
2009-03-18 22:15:38 +01:00
} catch ( e ) {
thrown = true ;
}
ok ( thrown , "Exception thrown when trying to change type property" ) ;
2011-04-11 22:33:29 +02:00
equals ( "button" , button . attr ( "type" ) , "Verify that you can't change the type of a button element" ) ;
2011-04-22 03:33:09 +02:00
var $radio = jQuery ( "<input>" , { "value" : "sup" , "type" : "radio" } ) . appendTo ( "#testForm" ) ;
equals ( $radio . val ( ) , "sup" , "Value is not reset when type is set after value on a radio" ) ;
2011-03-25 15:40:46 +01:00
// Setting attributes on svg elements (bug #3116)
2011-04-14 05:45:58 +02: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 22:33:29 +02:00
+ "<circle cx='200' cy='200' r='150' />"
+ "</svg>" ) . appendTo ( "body" ) ;
equals ( $svg . attr ( "cx" , 100 ) . attr ( "cx" ) , "100" , "Set attribute on svg element" ) ;
2011-03-25 15:40:46 +01:00
$svg . remove ( ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-09-15 19:23:26 +02:00
test ( "attr(jquery_method)" , function ( ) {
2009-12-17 20:18:15 +01:00
expect ( 7 ) ;
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
var $elem = jQuery ( "<div />" ) ,
elem = $elem [ 0 ] ;
2010-12-30 07:34:48 +01:00
// one at a time
2011-04-11 22:33:29 +02:00
$elem . attr ( { html : "foo" } , true ) ;
equals ( elem . innerHTML , "foo" , "attr(html)" ) ;
2010-12-30 07:34:48 +01:00
2011-04-11 22:33:29 +02:00
$elem . attr ( { text : "bar" } , true ) ;
equals ( elem . innerHTML , "bar" , "attr(text)" ) ;
2010-12-30 07:34:48 +01:00
2011-04-11 22:33:29 +02:00
$elem . attr ( { css : { color : "red" } } , true ) ;
ok ( /^(#ff0000|red)$/i . test ( elem . style . color ) , "attr(css)" ) ;
2010-12-30 07:34:48 +01:00
2011-04-11 22:33:29 +02:00
$elem . attr ( { height : 10 } , true ) ;
equals ( elem . style . height , "10px" , "attr(height)" ) ;
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
// Multiple attributes
2010-12-30 07:34:48 +01:00
2009-09-15 19:23:26 +02:00
$elem . attr ( {
width : 10 ,
css : { paddingLeft : 1 , paddingRight : 1 }
2009-12-18 18:41:53 +01:00
} , true ) ;
2010-12-30 07:34:48 +01:00
2011-04-11 22:33:29 +02:00
equals ( elem . style . width , "10px" , "attr({...})" ) ;
equals ( elem . style . paddingLeft , "1px" , "attr({...})" ) ;
equals ( elem . style . paddingRight , "1px" , "attr({...})" ) ;
2009-09-15 19:23:26 +02:00
} ) ;
2009-03-18 22:15:38 +01:00
if ( ! isLocal ) {
test ( "attr(String, Object) - Loaded via XML document" , function ( ) {
expect ( 2 ) ;
stop ( ) ;
2011-04-11 22:33:29 +02:00
jQuery . get ( "data/dashboard.xml" , function ( xml ) {
2009-03-18 22:15:38 +01:00
var titles = [ ] ;
2011-04-11 22:33:29 +02:00
jQuery ( "tab" , xml ) . each ( function ( ) {
titles . push ( jQuery ( this ) . attr ( "title" ) ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2011-04-11 22:33:29 +02:00
equals ( titles [ 0 ] , "Location" , "attr() in XML context: Check first title" ) ;
equals ( titles [ 1 ] , "Users" , "attr() in XML context: Check second title" ) ;
2009-03-18 22:15:38 +01:00
start ( ) ;
} ) ;
} ) ;
}
test ( "attr('tabindex')" , function ( ) {
expect ( 8 ) ;
// elements not natively tabbable
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#listWithTabIndex" ) . attr ( "tabindex" ) , 5 , "not natively tabbable, with tabindex set to 0" ) ;
equals ( jQuery ( "#divWithNoTabIndex" ) . attr ( "tabindex" ) , undefined , "not natively tabbable, no tabindex set" ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
// anchor with href
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#linkWithNoTabIndex" ) . attr ( "tabindex" ) , 0 , "anchor with href, no tabindex set" ) ;
equals ( jQuery ( "#linkWithTabIndex" ) . attr ( "tabindex" ) , 2 , "anchor with href, tabindex set to 2" ) ;
equals ( jQuery ( "#linkWithNegativeTabIndex" ) . attr ( "tabindex" ) , - 1 , "anchor with href, tabindex set to -1" ) ;
2009-03-18 22:15:38 +01:00
// anchor without href
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#linkWithNoHrefWithNoTabIndex" ) . attr ( "tabindex" ) , undefined , "anchor without href, no tabindex set" ) ;
equals ( jQuery ( "#linkWithNoHrefWithTabIndex" ) . attr ( "tabindex" ) , 1 , "anchor without href, tabindex set to 2" ) ;
equals ( jQuery ( "#linkWithNoHrefWithNegativeTabIndex" ) . attr ( "tabindex" ) , - 1 , "anchor without href, no tabindex set" ) ;
2009-03-18 22:15:38 +01:00
} ) ;
test ( "attr('tabindex', value)" , function ( ) {
expect ( 9 ) ;
2011-04-11 22:33:29 +02:00
var element = jQuery ( "#divWithNoTabIndex" ) ;
equals ( element . attr ( "tabindex" ) , undefined , "start with no tabindex" ) ;
2009-03-18 22:15:38 +01:00
// set a positive string
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , "1" ) ;
equals ( element . attr ( "tabindex" ) , 1 , "set tabindex to 1 (string)" ) ;
2009-03-18 22:15:38 +01:00
// set a zero string
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , "0" ) ;
equals ( element . attr ( "tabindex" ) , 0 , "set tabindex to 0 (string)" ) ;
2009-03-18 22:15:38 +01:00
// set a negative string
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , "-1" ) ;
equals ( element . attr ( "tabindex" ) , - 1 , "set tabindex to -1 (string)" ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
// set a positive number
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , 1 ) ;
equals ( element . attr ( "tabindex" ) , 1 , "set tabindex to 1 (number)" ) ;
2009-03-18 22:15:38 +01:00
// set a zero number
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , 0 ) ;
equals ( element . attr ( "tabindex" ) , 0 , "set tabindex to 0 (number)" ) ;
2009-03-18 22:15:38 +01:00
// set a negative number
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , - 1 ) ;
equals ( element . attr ( "tabindex" ) , - 1 , "set tabindex to -1 (number)" ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
element = jQuery ( "#linkWithTabIndex" ) ;
equals ( element . attr ( "tabindex" ) , 2 , "start with tabindex 2" ) ;
2009-03-18 22:15:38 +01:00
2011-04-11 22:33:29 +02:00
element . attr ( "tabindex" , - 1 ) ;
equals ( element . attr ( "tabindex" ) , - 1 , "set negative tabindex" ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "removeAttr(String)" , function ( ) {
2011-05-04 17:29:38 +02:00
expect ( 7 ) ;
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#mark" ) . removeAttr ( "class" ) [ 0 ] . className , "" , "remove class" ) ;
equals ( jQuery ( "#form" ) . removeAttr ( "id" ) . attr ( "id" ) , undefined , "Remove id" ) ;
equals ( jQuery ( "#foo" ) . attr ( "style" , "position:absolute;" ) . removeAttr ( "style" ) . attr ( "style" ) , undefined , "Check removing style attribute" ) ;
equals ( jQuery ( "#form" ) . attr ( "style" , "position:absolute;" ) . removeAttr ( "style" ) . attr ( "style" ) , undefined , "Check removing style attribute on a form" ) ;
equals ( jQuery ( "#fx-test-group" ) . attr ( "height" , "3px" ) . removeAttr ( "height" ) . css ( "height" ) , "1px" , "Removing height attribute has no effect on height set with style attribute" ) ;
2011-05-04 17:29:38 +02:00
jQuery ( "#check1" ) . removeAttr ( "checked" ) . prop ( "checked" , true ) . removeAttr ( "checked" ) ;
equals ( document . getElementById ( "check1" ) . checked , false , "removeAttr sets boolean properties to false" ) ;
jQuery ( "#text1" ) . prop ( "readOnly" , true ) . removeAttr ( "readonly" ) ;
equals ( document . getElementById ( "text1" ) . readOnly , false , "removeAttr sets boolean properties to false" ) ;
2011-03-08 18:07:05 +01:00
} ) ;
2011-05-04 06:31:01 +02:00
test ( "prop(String, Object)" , function ( ) {
expect ( 30 ) ;
equals ( jQuery ( "#text1" ) . prop ( "value" ) , "Test" , "Check for value attribute" ) ;
equals ( jQuery ( "#text1" ) . prop ( "value" , "Test2" ) . prop ( "defaultValue" ) , "Test" , "Check for defaultValue attribute" ) ;
equals ( jQuery ( "#select2" ) . prop ( "selectedIndex" ) , 3 , "Check for selectedIndex attribute" ) ;
equals ( jQuery ( "#foo" ) . prop ( "nodeName" ) . toUpperCase ( ) , "DIV" , "Check for nodeName attribute" ) ;
equals ( jQuery ( "#foo" ) . prop ( "tagName" ) . toUpperCase ( ) , "DIV" , "Check for tagName attribute" ) ;
equals ( jQuery ( "<option/>" ) . prop ( "selected" ) , false , "Check selected attribute on disconnected element." ) ;
equals ( jQuery ( "#listWithTabIndex" ) . prop ( "tabindex" ) , 5 , "Check retrieving tabindex" ) ;
jQuery ( "#text1" ) . prop ( "readonly" , true ) ;
equals ( document . getElementById ( "text1" ) . readOnly , true , "Check setting readOnly property with 'readonly'" ) ;
equals ( jQuery ( "#label-for" ) . prop ( "for" ) , "action" , "Check retrieving htmlFor" ) ;
jQuery ( "#text1" ) . prop ( "class" , "test" ) ;
equals ( document . getElementById ( "text1" ) . className , "test" , "Check setting className with 'class'" ) ;
equals ( jQuery ( "#text1" ) . prop ( "maxlength" ) , 30 , "Check retrieving maxLength" ) ;
jQuery ( "#table" ) . prop ( "cellspacing" , 1 ) ;
equals ( jQuery ( "#table" ) . prop ( "cellSpacing" ) , "1" , "Check setting and retrieving cellSpacing" ) ;
jQuery ( "#table" ) . prop ( "cellpadding" , 1 ) ;
equals ( jQuery ( "#table" ) . prop ( "cellPadding" ) , "1" , "Check setting and retrieving cellPadding" ) ;
jQuery ( "#table" ) . prop ( "rowspan" , 1 ) ;
equals ( jQuery ( "#table" ) . prop ( "rowSpan" ) , 1 , "Check setting and retrieving rowSpan" ) ;
jQuery ( "#table" ) . prop ( "colspan" , 1 ) ;
equals ( jQuery ( "#table" ) . prop ( "colSpan" ) , 1 , "Check setting and retrieving colSpan" ) ;
jQuery ( "#table" ) . prop ( "usemap" , 1 ) ;
equals ( jQuery ( "#table" ) . prop ( "useMap" ) , 1 , "Check setting and retrieving useMap" ) ;
jQuery ( "#table" ) . prop ( "frameborder" , 1 ) ;
equals ( jQuery ( "#table" ) . prop ( "frameBorder" ) , 1 , "Check setting and retrieving frameBorder" ) ;
QUnit . reset ( ) ;
var body = document . body , $body = jQuery ( body ) ;
ok ( $body . prop ( "nextSibling" ) === null , "Make sure a null expando returns null" ) ;
body . foo = "bar" ;
equals ( $body . prop ( "foo" ) , "bar" , "Make sure the expando is preferred over the dom attribute" ) ;
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 ) ;
equals ( jQuery ( option ) . prop ( "selected" ) , true , "Make sure that a single option is selected, even when in an optgroup." ) ;
equals ( jQuery ( document ) . prop ( "nodeName" ) , "#document" , "prop works correctly on document nodes (bug #7451)." ) ;
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)." ) ;
} ) ;
var obj = { } ;
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-03-08 18:07:05 +01:00
test ( "removeProp(String)" , function ( ) {
expect ( 6 ) ;
2010-11-13 14:39:28 +01:00
var attributeNode = document . createAttribute ( "irrelevant" ) ,
commentNode = document . createComment ( "some comment" ) ,
textNode = document . createTextNode ( "some text" ) ,
obj = { } ;
2011-03-08 18:07:05 +01:00
strictEqual ( jQuery ( "#firstp" ) . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) [ 0 ] . nonexisting , undefined , "removeprop works correctly on DOM element nodes" ) ;
2010-11-13 14:39:28 +01:00
2010-12-07 03:17:42 +01:00
jQuery . each ( [ document , obj ] , function ( i , ele ) {
2010-11-13 14:39:28 +01:00
var $ele = jQuery ( ele ) ;
2011-03-08 18:07:05 +01:00
$ele . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) ;
strictEqual ( ele . nonexisting , undefined , "removeProp works correctly on non DOM element nodes (bug #7500)." ) ;
2010-11-13 14:39:28 +01:00
} ) ;
2010-12-07 03:17:42 +01:00
jQuery . each ( [ commentNode , textNode , attributeNode ] , function ( i , ele ) {
2010-11-13 14:39:28 +01:00
$ele = jQuery ( ele ) ;
2011-03-08 18:07:05 +01:00
$ele . prop ( "nonexisting" , "foo" ) . removeProp ( "nonexisting" ) ;
strictEqual ( ele . nonexisting , undefined , "removeProp works correctly on non DOM element nodes (bug #7500)." ) ;
2010-11-13 14:39:28 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
} ) ;
2010-01-07 15:55:15 +01:00
test ( "val()" , function ( ) {
2011-05-03 20:48:36 +02:00
expect ( 26 ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
document . getElementById ( "text1" ) . value = "bla" ;
2010-01-07 15:55:15 +01:00
equals ( jQuery ( "#text1" ) . val ( ) , "bla" , "Check for modified value of input element" ) ;
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2010-01-07 15:55:15 +01:00
equals ( jQuery ( "#text1" ) . val ( ) , "Test" , "Check for value of input element" ) ;
// ticket #1714 this caused a JS error in IE
equals ( jQuery ( "#first" ) . val ( ) , "" , "Check a paragraph element to see if it has a value" ) ;
ok ( jQuery ( [ ] ) . val ( ) === undefined , "Check an empty jQuery object will return undefined from val" ) ;
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#select2" ) . val ( ) , "3" , "Call val() on a single=\"single\" select" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
same ( jQuery ( "#select3" ) . val ( ) , [ "1" , "2" ] , "Call val() on a multiple=\"multiple\" select" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#option3c" ) . val ( ) , "2" , "Call val() on a option element with value" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#option3a" ) . val ( ) , "" , "Call val() on a option element with empty value" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#option3e" ) . val ( ) , "no value" , "Call val() on a option element with no value attribute" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#option3a" ) . val ( ) , "" , "Call val() on a option element with no value attribute" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
jQuery ( "#select3" ) . val ( "" ) ;
same ( jQuery ( "#select3" ) . val ( ) , [ "" ] , "Call val() on a multiple=\"multiple\" select" ) ;
2010-01-07 15:55:15 +01:00
2011-04-11 22:33:29 +02:00
same ( jQuery ( "#select4" ) . val ( ) , [ ] , "Call val() on multiple=\"multiple\" select with all disabled options" ) ;
2010-09-24 23:26:22 +02:00
2011-04-11 22:33:29 +02:00
jQuery ( "#select4 optgroup" ) . add ( "#select4 > [disabled]" ) . attr ( "disabled" , false ) ;
same ( jQuery ( "#select4" ) . val ( ) , [ "2" , "3" ] , "Call val() on multiple=\"multiple\" select with some disabled options" ) ;
2010-09-24 23:26:22 +02:00
2011-04-11 22:33:29 +02:00
jQuery ( "#select4" ) . attr ( "disabled" , true ) ;
same ( jQuery ( "#select4" ) . val ( ) , [ "2" , "3" ] , "Call val() on disabled multiple=\"multiple\" select" ) ;
2010-09-24 23:26:22 +02:00
2011-04-11 22:33:29 +02:00
equals ( jQuery ( "#select5" ) . val ( ) , "3" , "Check value on ambiguous select." ) ;
2010-09-28 17:36:28 +02:00
2011-04-11 22:33:29 +02:00
jQuery ( "#select5" ) . val ( 1 ) ;
equals ( jQuery ( "#select5" ) . val ( ) , "1" , "Check value on ambiguous select." ) ;
2010-09-28 17:36:28 +02:00
2011-04-11 22:33:29 +02:00
jQuery ( "#select5" ) . val ( 3 ) ;
equals ( jQuery ( "#select5" ) . val ( ) , "3" , "Check value on ambiguous select." ) ;
2010-09-28 17:36:28 +02:00
2010-08-23 23:23:13 +02:00
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 15:55:15 +01:00
same ( checks . serialize ( ) , "" , "Get unchecked values." ) ;
equals ( checks . eq ( 3 ) . val ( ) , "on" , "Make sure a value of 'on' is provided if none is specified." ) ;
checks . val ( [ "2" ] ) ;
same ( checks . serialize ( ) , "test=2" , "Get a single checked value." ) ;
checks . val ( [ "1" , "" ] ) ;
same ( checks . serialize ( ) , "test=1&test=" , "Get multiple checked values." ) ;
checks . val ( [ "" , "2" ] ) ;
same ( checks . serialize ( ) , "test=2&test=" , "Get multiple checked values." ) ;
checks . val ( [ "1" , "on" ] ) ;
same ( checks . serialize ( ) , "test=1&test=on" , "Get multiple checked values." ) ;
checks . remove ( ) ;
2011-04-18 00:15:20 +02:00
var $button = jQuery ( "<button value='foobar'>text</button>" ) . insertAfter ( "#button" ) ;
equals ( $button . val ( ) , "foobar" , "Value retrieval on a button does not return innerHTML" ) ;
equals ( $button . val ( "baz" ) . html ( ) , "text" , "Setting the value does not change innerHTML" ) ;
2011-05-03 20:48:36 +02:00
equals ( jQuery ( "<option/>" ) . val ( "test" ) . attr ( "value" ) , "test" , "Setting value sets the value attribute" ) ;
2010-01-07 15:55:15 +01:00
} ) ;
var testVal = function ( valueObj ) {
2010-08-21 04:32:34 +02:00
expect ( 8 ) ;
2010-01-07 15:55:15 +01:00
2011-04-13 01:32:18 +02:00
QUnit . reset ( ) ;
2011-04-11 22:33:29 +02:00
jQuery ( "#text1" ) . val ( valueObj ( "test" ) ) ;
equals ( document . getElementById ( "text1" ) . value , "test" , "Check for modified (via val(String)) value of input element" ) ;
2010-01-07 15:55:15 +01:00
2010-08-21 04:32:34 +02:00
jQuery ( "#text1" ) . val ( valueObj ( undefined ) ) ;
2011-04-11 22:33:29 +02:00
equals ( document . getElementById ( "text1" ) . value , "" , "Check for modified (via val(undefined)) value of input element" ) ;
2010-08-21 04:32:34 +02:00
2010-01-07 15:55:15 +01:00
jQuery ( "#text1" ) . val ( valueObj ( 67 ) ) ;
2011-04-11 22:33:29 +02:00
equals ( document . getElementById ( "text1" ) . value , "67" , "Check for modified (via val(Number)) value of input element" ) ;
2010-01-07 15:55:15 +01:00
2010-08-21 04:32:34 +02:00
jQuery ( "#text1" ) . val ( valueObj ( null ) ) ;
2011-04-11 22:33:29 +02:00
equals ( document . getElementById ( "text1" ) . value , "" , "Check for modified (via val(null)) value of input element" ) ;
2010-08-21 04:32:34 +02:00
2011-04-13 01:32:18 +02:00
var $select1 = jQuery ( "#select1" ) ;
$select1 . val ( valueObj ( "3" ) ) ;
equals ( $select1 . val ( ) , "3" , "Check for modified (via val(String)) value of select element" ) ;
2010-01-07 15:55:15 +01:00
2011-04-13 01:32:18 +02:00
$select1 . val ( valueObj ( 2 ) ) ;
equals ( $select1 . val ( ) , "2" , "Check for modified (via val(Number)) value of select element" ) ;
2010-01-07 15:55:15 +01:00
2011-04-13 01:32:18 +02:00
$select1 . append ( "<option value='4'>four</option>" ) ;
$select1 . val ( valueObj ( 4 ) ) ;
equals ( $select1 . val ( ) , "4" , "Should be possible to set the val() to a newly created option" ) ;
2010-01-07 15:55:15 +01:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . val ( valueObj ( "asdf" ) ) ;
equals ( j . val ( ) , "asdf" , "Check node,textnode,comment with val()" ) ;
j . removeAttr ( "value" ) ;
}
test ( "val(String/Number)" , function ( ) {
testVal ( bareObj ) ;
} ) ;
test ( "val(Function)" , function ( ) {
testVal ( functionReturningObj ) ;
2010-10-09 05:48:06 +02:00
} ) ;
test ( "val(Array of Numbers) (Bug #7123)" , function ( ) {
expect ( 4 ) ;
2011-04-11 22:33:29 +02: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 05:48:06 +02: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 07:34:48 +01:00
2010-10-09 05:48:06 +02:00
elements . remove ( ) ;
} ) ;
2010-01-07 15:55:15 +01:00
2010-01-07 17:15:40 +01:00
test ( "val(Function) with incoming value" , function ( ) {
expect ( 10 ) ;
2011-04-22 03:33:09 +02:00
QUnit . reset ( ) ;
2010-01-07 17:15:40 +01:00
var oldVal = jQuery ( "#text1" ) . val ( ) ;
jQuery ( "#text1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return "test" ;
} ) ;
2011-04-11 22:33:29 +02:00
equals ( document . getElementById ( "text1" ) . value , "test" , "Check for modified (via val(String)) value of input element" ) ;
2010-01-07 17:15:40 +01:00
oldVal = jQuery ( "#text1" ) . val ( ) ;
jQuery ( "#text1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return 67 ;
} ) ;
2011-04-11 22:33:29 +02:00
equals ( document . getElementById ( "text1" ) . value , "67" , "Check for modified (via val(Number)) value of input element" ) ;
2010-01-07 17:15:40 +01:00
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return "3" ;
} ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "3" , "Check for modified (via val(String)) value of select element" ) ;
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return 2 ;
} ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "2" , "Check for modified (via val(Number)) value of select element" ) ;
jQuery ( "#select1" ) . append ( "<option value='4'>four</option>" ) ;
oldVal = jQuery ( "#select1" ) . val ( ) ;
jQuery ( "#select1" ) . val ( function ( i , val ) {
equals ( val , oldVal , "Make sure the incoming value is correct." ) ;
return 4 ;
} ) ;
equals ( jQuery ( "#select1" ) . val ( ) , "4" , "Should be possible to set the val() to a newly created option" ) ;
} ) ;
2011-02-10 23:50:02 +01: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 08:43:57 +02: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 23:50:02 +01: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-04-11 22:33:29 +02:00
same ( jQuery ( "#select3" ) . val ( ) , [ "1" , "2" ] , "Call val() on a multiple=\"multiple\" select" ) ;
2011-02-10 23:50:02 +01:00
jQuery ( "#kk" ) . remove ( ) ;
} ) ;
2009-12-10 05:57:19 +01:00
var testAddClass = function ( valueObj ) {
2010-02-13 20:30:27 +01:00
expect ( 5 ) ;
2009-03-18 22:15:38 +01:00
var div = jQuery ( "div" ) ;
2009-12-10 05:57:19 +01:00
div . addClass ( valueObj ( "test" ) ) ;
2009-03-18 22:15:38 +01:00
var pass = true ;
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
if ( div . get ( i ) . className . indexOf ( "test" ) == - 1 ) pass = false ;
}
ok ( pass , "Add Class" ) ;
// using contents will get regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-12-10 05:57:19 +01:00
j . addClass ( valueObj ( "asdf" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( j . hasClass ( "asdf" ) , "Check node,textnode,comment for addClass" ) ;
2010-02-13 08:18:38 +01:00
div = jQuery ( "<div/>" ) ;
div . addClass ( valueObj ( "test" ) ) ;
equals ( div . attr ( "class" ) , "test" , "Make sure there's no extra whitespace." ) ;
div . attr ( "class" , " foo" ) ;
div . addClass ( valueObj ( "test" ) ) ;
equals ( div . attr ( "class" ) , "foo test" , "Make sure there's no extra whitespace." ) ;
2010-02-13 20:30:27 +01:00
div . attr ( "class" , "foo" ) ;
div . addClass ( valueObj ( "bar baz" ) ) ;
equals ( div . attr ( "class" ) , "foo bar baz" , "Make sure there isn't too much trimming." ) ;
2009-12-14 16:56:01 +01:00
} ;
2009-12-10 05:57:19 +01:00
test ( "addClass(String)" , function ( ) {
2009-12-10 06:15:49 +01:00
testAddClass ( bareObj ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
test ( "addClass(Function)" , function ( ) {
2009-12-10 06:15:49 +01:00
testAddClass ( functionReturningObj ) ;
2009-12-10 05:57:19 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "addClass(Function) with incoming value" , function ( ) {
2010-10-19 11:14:07 +02:00
expect ( 45 ) ;
2010-01-07 17:15:40 +01:00
var div = jQuery ( "div" ) , old = div . map ( function ( ) {
2011-03-08 18:07:05 +01:00
return jQuery ( this ) . attr ( "class" ) || "" ;
2010-01-07 17:15:40 +01:00
} ) ;
2011-03-08 18:07:05 +01:00
2010-01-07 17:15:40 +01:00
div . addClass ( function ( i , val ) {
2011-03-08 18:07:05 +01:00
if ( this . id !== "_firebugConsole" ) {
2010-03-23 17:12:16 +01:00
equals ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
return "test" ;
}
2010-01-07 17:15:40 +01:00
} ) ;
var pass = true ;
2011-03-08 18:07:05 +01:00
for ( var i = 0 ; i < div . length ; i ++ ) {
if ( div . get ( i ) . className . indexOf ( "test" ) == - 1 ) pass = false ;
2010-01-07 17:15:40 +01:00
}
ok ( pass , "Add Class" ) ;
} ) ;
2009-12-10 05:57:19 +01:00
var testRemoveClass = function ( valueObj ) {
2010-02-02 03:33:58 +01:00
expect ( 7 ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
var $divs = jQuery ( "div" ) ;
2009-05-02 23:14:38 +02:00
2009-12-10 05:57:19 +01:00
$divs . addClass ( "test" ) . removeClass ( valueObj ( "test" ) ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
ok ( ! $divs . is ( ".test" ) , "Remove Class" ) ;
2009-03-18 22:15:38 +01:00
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2011-04-11 22:33:29 +02:00
$divs = jQuery ( "div" ) ;
2009-03-18 22:15:38 +01:00
$divs . addClass ( "test" ) . addClass ( "foo" ) . addClass ( "bar" ) ;
2009-12-10 05:57:19 +01:00
$divs . removeClass ( valueObj ( "test" ) ) . removeClass ( valueObj ( "bar" ) ) . removeClass ( valueObj ( "foo" ) ) ;
2009-05-02 23:14:38 +02:00
2011-04-11 22:33:29 +02:00
ok ( ! $divs . is ( ".test,.bar,.foo" ) , "Remove multiple classes" ) ;
2009-03-18 22:15:38 +01:00
2010-07-28 17:19:01 +02:00
QUnit . reset ( ) ;
2011-04-11 22:33:29 +02:00
$divs = jQuery ( "div" ) ;
2009-03-18 22:15:38 +01:00
// Make sure that a null value doesn't cause problems
2009-12-10 05:57:19 +01:00
$divs . eq ( 0 ) . addClass ( "test" ) . removeClass ( valueObj ( null ) ) ;
2011-04-11 22:33:29 +02:00
ok ( $divs . eq ( 0 ) . is ( ".test" ) , "Null value passed to removeClass" ) ;
2009-05-02 23:14:38 +02:00
2009-12-10 05:57:19 +01:00
$divs . eq ( 0 ) . addClass ( "test" ) . removeClass ( valueObj ( "" ) ) ;
2011-04-11 22:33:29 +02:00
ok ( $divs . eq ( 0 ) . is ( ".test" ) , "Empty string passed to removeClass" ) ;
2009-03-18 22:15:38 +01:00
// using contents will get regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-12-10 05:57:19 +01:00
j . removeClass ( valueObj ( "asdf" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( ! j . hasClass ( "asdf" ) , "Check node,textnode,comment for removeClass" ) ;
2010-02-02 03:33:58 +01:00
var div = document . createElement ( "div" ) ;
div . className = " test foo " ;
jQuery ( div ) . removeClass ( valueObj ( "foo" ) ) ;
equals ( div . className , "test" , "Make sure remaining className is trimmed." ) ;
div . className = " test " ;
jQuery ( div ) . removeClass ( valueObj ( "test" ) ) ;
equals ( div . className , "" , "Make sure there is nothing left after everything is removed." ) ;
2009-12-10 05:57:19 +01:00
} ;
test ( "removeClass(String) - simple" , function ( ) {
2009-12-10 06:15:49 +01:00
testRemoveClass ( bareObj ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
test ( "removeClass(Function) - simple" , function ( ) {
2009-12-10 06:15:49 +01:00
testRemoveClass ( functionReturningObj ) ;
2009-12-10 05:57:19 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "removeClass(Function) with incoming value" , function ( ) {
2010-10-19 11:14:07 +02:00
expect ( 45 ) ;
2010-01-07 17:15:40 +01:00
2011-04-11 22:33:29 +02:00
var $divs = jQuery ( "div" ) . addClass ( "test" ) , old = $divs . map ( function ( ) {
2010-01-07 17:15:40 +01:00
return jQuery ( this ) . attr ( "class" ) ;
} ) ;
$divs . removeClass ( function ( i , val ) {
2010-03-23 17:12:16 +01:00
if ( this . id !== "_firebugConsole" ) {
equals ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
return "test" ;
}
2010-01-07 17:15:40 +01:00
} ) ;
2011-04-11 22:33:29 +02:00
ok ( ! $divs . is ( ".test" ) , "Remove Class" ) ;
2010-01-07 17:15:40 +01:00
2010-12-30 07:34:48 +01:00
QUnit . reset ( ) ;
2010-01-07 17:15:40 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
var testToggleClass = function ( valueObj ) {
2009-05-03 00:35:39 +02:00
expect ( 17 ) ;
2009-05-02 23:14:38 +02:00
2009-03-18 22:15:38 +01:00
var e = jQuery ( "#firstp" ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) ) ;
2009-03-18 22:15:38 +01:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-05-02 23:14:38 +02:00
// class name with a boolean
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) , false ) ;
2009-03-18 22:15:38 +01:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) , true ) ;
2009-03-18 22:15:38 +01:00
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "test" ) , false ) ;
2009-03-18 22:15:38 +01:00
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2009-05-02 23:14:38 +02:00
// multiple class names
e . addClass ( "testA testB" ) ;
ok ( ( e . is ( ".testA.testB" ) ) , "Assert 2 different classes present" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "testB testC" ) ) ;
2009-05-02 23:14:38 +02:00
ok ( ( e . is ( ".testA.testC" ) && ! e . is ( ".testB" ) ) , "Assert 1 class added, 1 class removed, and 1 class kept" ) ;
2009-12-10 05:57:19 +01:00
e . toggleClass ( valueObj ( "testA testC" ) ) ;
2009-05-02 23:14:38 +02:00
ok ( ( ! e . is ( ".testA" ) && ! e . is ( ".testB" ) && ! e . is ( ".testC" ) ) , "Assert no class present" ) ;
// toggleClass storage
e . toggleClass ( true ) ;
2011-01-09 22:52:33 +01:00
ok ( e [ 0 ] . className === "" , "Assert class is empty (data was empty)" ) ;
2009-05-03 00:35:39 +02:00
e . addClass ( "testD testE" ) ;
ok ( e . is ( ".testD.testE" ) , "Assert class present" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( ) ;
2009-05-03 00:35:39 +02:00
ok ( ! e . is ( ".testD.testE" ) , "Assert class not present" ) ;
2011-04-11 22:33:29 +02:00
ok ( jQuery . _data ( e [ 0 ] , "__className__" ) === "testD testE" , "Assert data was stored" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( ) ;
2009-05-03 00:35:39 +02:00
ok ( e . is ( ".testD.testE" ) , "Assert class present (restored from data)" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( false ) ;
2009-05-03 00:35:39 +02:00
ok ( ! e . is ( ".testD.testE" ) , "Assert class not present" ) ;
2009-05-02 23:14:38 +02:00
e . toggleClass ( true ) ;
2009-05-03 00:35:39 +02: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 15:57:38 +02:00
2009-05-02 23:14:38 +02:00
// Cleanup
e . removeClass ( "testD" ) ;
2011-04-11 22:33:29 +02:00
jQuery . removeData ( e [ 0 ] , "__className__" , true ) ;
2009-12-10 05:57:19 +01:00
} ;
test ( "toggleClass(String|boolean|undefined[, boolean])" , function ( ) {
2009-12-10 06:15:49 +01:00
testToggleClass ( bareObj ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-12-10 05:57:19 +01:00
test ( "toggleClass(Function[, boolean])" , function ( ) {
2009-12-10 06:15:49 +01:00
testToggleClass ( functionReturningObj ) ;
2009-12-10 05:57:19 +01:00
} ) ;
2010-01-07 17:15:40 +01:00
test ( "toggleClass(Fucntion[, boolean]) with incoming value" , function ( ) {
expect ( 14 ) ;
2009-12-10 05:57:19 +01:00
2010-01-07 17:15:40 +01:00
var e = jQuery ( "#firstp" ) , old = e . attr ( "class" ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
return "test" ;
} ) ;
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
return "test" ;
} ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2009-12-10 05:57:19 +01:00
2010-01-07 17:15:40 +01:00
// class name with a boolean
e . toggleClass ( function ( i , val , state ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
equals ( state , false , "Make sure that the state is passed in." ) ;
return "test" ;
} , false ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val , state ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
equals ( state , true , "Make sure that the state is passed in." ) ;
return "test" ;
} , true ) ;
ok ( e . is ( ".test" ) , "Assert class present" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
old = e . attr ( "class" ) ;
2010-12-30 07:34:48 +01:00
2010-01-07 17:15:40 +01:00
e . toggleClass ( function ( i , val , state ) {
equals ( val , old , "Make sure the incoming value is correct." ) ;
equals ( state , false , "Make sure that the state is passed in." ) ;
return "test" ;
} , false ) ;
ok ( ! e . is ( ".test" ) , "Assert class not present" ) ;
// Cleanup
e . removeClass ( "test" ) ;
2011-04-11 22:33:29 +02:00
jQuery . removeData ( e [ 0 ] , "__className__" , true ) ;
2009-03-18 22:15:38 +01:00
} ) ;
2009-09-08 03:07:50 +02:00
test ( "addClass, removeClass, hasClass" , function ( ) {
2010-12-01 21:31:22 +01:00
expect ( 17 ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
var jq = jQuery ( "<p>Hi</p>" ) , x = jq [ 0 ] ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . addClass ( "hi" ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "hi" , "Check single added class" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . addClass ( "foo bar" ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "hi foo bar" , "Check more added classes" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . removeClass ( ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "" , "Remove all classes" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
jq . addClass ( "hi foo bar" ) ;
jq . removeClass ( "foo" ) ;
2009-03-18 22:15:38 +01:00
equals ( x . className , "hi bar" , "Check removal of one class" ) ;
2010-12-30 07:34:48 +01:00
2009-09-08 03:07:50 +02:00
ok ( jq . hasClass ( "hi" ) , "Check has1" ) ;
ok ( jq . hasClass ( "bar" ) , "Check has2" ) ;
2010-12-30 07:34:48 +01:00
2010-12-01 21:31:22 +01: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 22:24:28 +01: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 21:31:22 +01:00
ok ( jq . hasClass ( "class4" ) , "Check hasClass with carriage return" ) ;
ok ( jq . is ( ".class4" ) , "Check is with carriage return" ) ;
2010-12-30 07:34:48 +01:00
2009-12-14 22:24:28 +01: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 21:31:22 +01:00
jq . removeClass ( "class4" ) ;
ok ( jq . hasClass ( "class4" ) == false , "Check the class has been properly removed" ) ;
2011-05-04 03:44:42 +02:00
} ) ;