Permalink
Browse files

Made it so that you can't change the type of an input element, having…

… it throw an exception instead (except for input elements that haven't yet been injected into the DOM). (Bug #1536)
  • Loading branch information...
jeresig committed Sep 4, 2007
1 parent 53dc6af commit 7d02f06e036f6a42ccd2c276e9f00a7cd35dc74a
Showing with 30 additions and 2 deletions.
  1. +23 −1 src/jquery/coreTest.js
  2. +7 −1 src/jquery/jquery.js
View
@@ -232,7 +232,7 @@ test("attr(Hash)", function() {
});
test("attr(String, Object)", function() {
- expect(8);
+ expect(12);
var div = $("div");
div.attr("foo", "bar");
var pass = true;
@@ -255,6 +255,28 @@ test("attr(String, Object)", function() {
ok( document.getElementById('text1').readOnly == false, 'Set readonly attribute' );
$("#name").attr('maxlength', '5');
ok( document.getElementById('name').maxLength == '5', 'Set maxlength attribute' );
+
+ reset();
+
+ var type = $("#check2").attr('type');
+ var thrown = false;
+ try {
+ $("#check2").attr('type','hidden');
+ } catch(e) {
+ thrown = true;
+ }
+ ok( thrown, "Exception thrown when trying to change type property" );
+ equals( type, $("#check2").attr('type'), "Verify that you can't change the type of an input element" );
+
+ var check = document.createElement("input");
+ var thrown = true;
+ try {
+ $(check).attr('type','checkbox');
+ } catch(e) {
+ thrown = false;
+ }
+ ok( thrown, "Exception thrown when trying to change type property" );
+ equals( "checkbox", $(check).attr('type'), "Verify that you can change the type of an input element that isn't in the DOM" );
});
test("attr(String, Object) - Loaded via XML document", function() {
View
@@ -728,9 +728,15 @@ jQuery.extend({
// IE elem.getAttribute passes even for style
else if ( elem.tagName ) {
- if ( value != undefined ) elem.setAttribute( name, value );
+ if ( value != undefined ) {
+ if ( name == "type" && jQuery.nodeName(elem,"input") && elem.parentNode )
+ throw "type property can't be changed";
+ elem.setAttribute( name, value );
+ }
+
if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) )
return elem.getAttribute( name, 2 );
+
return elem.getAttribute( name );
// elem is actually elem.style ... set the style

0 comments on commit 7d02f06

Please sign in to comment.