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)
This commit is contained in:
parent
53dc6afc31
commit
7d02f06e03
2 changed files with 30 additions and 2 deletions
24
src/jquery/coreTest.js
vendored
24
src/jquery/coreTest.js
vendored
|
@ -232,7 +232,7 @@ test("attr(Hash)", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("attr(String, Object)", function() {
|
test("attr(String, Object)", function() {
|
||||||
expect(8);
|
expect(12);
|
||||||
var div = $("div");
|
var div = $("div");
|
||||||
div.attr("foo", "bar");
|
div.attr("foo", "bar");
|
||||||
var pass = true;
|
var pass = true;
|
||||||
|
@ -255,6 +255,28 @@ test("attr(String, Object)", function() {
|
||||||
ok( document.getElementById('text1').readOnly == false, 'Set readonly attribute' );
|
ok( document.getElementById('text1').readOnly == false, 'Set readonly attribute' );
|
||||||
$("#name").attr('maxlength', '5');
|
$("#name").attr('maxlength', '5');
|
||||||
ok( document.getElementById('name').maxLength == '5', 'Set maxlength attribute' );
|
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() {
|
test("attr(String, Object) - Loaded via XML document", function() {
|
||||||
|
|
8
src/jquery/jquery.js
vendored
8
src/jquery/jquery.js
vendored
|
@ -728,9 +728,15 @@ jQuery.extend({
|
||||||
// IE elem.getAttribute passes even for style
|
// IE elem.getAttribute passes even for style
|
||||||
else if ( elem.tagName ) {
|
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) )
|
if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) )
|
||||||
return elem.getAttribute( name, 2 );
|
return elem.getAttribute( name, 2 );
|
||||||
|
|
||||||
return elem.getAttribute( name );
|
return elem.getAttribute( name );
|
||||||
|
|
||||||
// elem is actually elem.style ... set the style
|
// elem is actually elem.style ... set the style
|
||||||
|
|
Loading…
Reference in a new issue