Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
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...
commit 7d02f06e036f6a42ccd2c276e9f00a7cd35dc74a 1 parent 53dc6af
@jeresig jeresig authored
Showing with 30 additions and 2 deletions.
  1. +23 −1 src/jquery/coreTest.js
  2. +7 −1 src/jquery/jquery.js
View
24 src/jquery/coreTest.js
@@ -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
8 src/jquery/jquery.js
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.