Bug Tracker

Ticket #2252: selecttest.aspx

File selecttest.aspx, 3.2 KB (added by erikkallen, 13 years ago)

Workaround

Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3        <head>
4                <title>Test</title>
5                <script language="javascript" type="text/javascript" src="/CoreScripts/jquery-1.3.2.js?asm=0.8.3631.29977"></script>
6<script language="javascript" type="text/javascript">
7$.fn.val = function(value) {
8        if ( value === undefined ) {
9                var elem = this[0];
10
11                if ( elem ) {
12                        if( jQuery.nodeName( elem, 'option' ) )
13                                return (elem.attributes.value || {}).specified ? elem.value : elem.text;
14                       
15                        // We need to handle select boxes special
16                        if ( jQuery.nodeName( elem, "select" ) ) {
17                                var index = elem.selectedIndex,
18                                        values = [],
19                                        options = elem.options,
20                                        one = elem.type == "select-one";
21
22                                // Nothing was selected
23                                if ( index < 0 )
24                                        return null;
25
26                                if (one && jQuery.browser.msie && parseFloat(jQuery.browser.version) < 7) {
27                                        var opt = this.children().get(index);
28                                        return (opt.attributes.value || {}).specified ? opt.value : opt.text;
29                                }
30                                else {
31                                        // Loop through all the selected options
32                                        for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
33                                                var option = options[ i ];
34
35                                                if ( option.selected ) {
36                                                        // Get the specifc value for the option
37                                                        value = jQuery(option).val();
38
39                                                        // We don't need an array for one selects
40                                                        if ( one )
41                                                                return value;
42
43                                                        // Multi-Selects return an array
44                                                        values.push( value );
45                                                }
46                                        }
47
48                                        return values;                         
49                                }
50                        }
51
52                        // Everything else, we just grab the value
53                        return (elem.value || "").replace(/\r/g, "");
54
55                }
56
57                return undefined;
58        }
59
60        if ( typeof value === "number" )
61                value += '';
62
63        return this.each(function(){
64                if ( this.nodeType != 1 )
65                        return;
66
67                if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
68                        this.checked = (jQuery.inArray(this.value, value) >= 0 ||
69                                jQuery.inArray(this.name, value) >= 0);
70
71                else if ( jQuery.nodeName( this, "select" ) ) {
72                        var values = jQuery.makeArray(value);
73                        if (jQuery.browser.msie && parseFloat(jQuery.browser.version) < 7 && this.type == 'select-one') {
74                                var children = $(this).children();
75                                var idx = -1;
76                                children.each(function(i) {
77                                        if (jQuery.inArray( this.value, values ) >= 0 || jQuery.inArray( this.text, values ) >= 0) {
78                                                idx = i
79                                                return false;
80                                        }
81                                });
82                                this.selectedIndex = idx;
83                                var x = this;
84
85                                window.setTimeout(function() { x.selectedIndex = idx; }, 0);
86                        }
87                        else {
88                                jQuery( "option", this ).each(function(){
89                                        this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
90                                                jQuery.inArray( this.text, values ) >= 0);
91                                });
92
93                                if ( !values.length )
94                                        this.selectedIndex = -1;
95                        }
96                } else
97                        this.value = value;
98        });
99}
100$(function() {
101        $('#sel').html('<option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option>');
102        $('#sel').val('2');
103        alert($('#sel').val());
104});
105</script>
106        </head>
107        <body>
108                <select id="sel" style="width: 100px">
109                       
110                </select>
111        </body>
112</html>