Jquery的val()函数在IE下产生的null的处理
今天在Ie下测试Jquery代码,发现在编辑填充默认值时,如果为空的字段全部显示null,但在FF和chrome下正常
?
?
${"#input"}.val(null);
?
?
开始在想是不是都要加上 !=null 的判断,但是总觉得代码量太大,很不舒服
?
于是查看了Jquery的源文件
?
val: function( value ) {if ( value === undefined ) {var elem = this[0];if ( elem ) {if ( jQuery.nodeName( elem, "option" ) ) {return (elem.attributes.value || {}).specified ? elem.value : elem.text;}// We need to handle select boxes specialif ( jQuery.nodeName( elem, "select" ) ) {var index = elem.selectedIndex,values = [],options = elem.options,one = elem.type === "select-one";// Nothing was selectedif ( index < 0 ) {return null;}// Loop through all the selected optionsfor ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {var option = options[ i ];if ( option.selected ) {// Get the specifc value for the optionvalue = jQuery(option).val();// We don't need an array for one selectsif ( one ) {return value;}// Multi-Selects return an arrayvalues.push( value );}}return values;}// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specifiedif ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {return elem.getAttribute("value") === null ? "on" : elem.value;}// Everything else, we just grab the valuereturn (elem.value || "").replace(rreturn, "");}return undefined;}var isFunction = jQuery.isFunction(value);return this.each(function(i) {var self = jQuery(this), val = value;if ( this.nodeType !== 1 ) {return;}if ( isFunction ) {val = value.call(this, i, self.val());}// Typecast each time if the value is a Function and the appended// value is therefore different each time.if ( typeof val === "number" ) {val += "";}if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {this.checked = jQuery.inArray( self.val(), val ) >= 0;} else if ( jQuery.nodeName( this, "select" ) ) {var values = jQuery.makeArray(val);jQuery( "option", this ).each(function() {this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;});if ( !values.length ) {this.selectedIndex = -1;}} else {this.value = val;}});
?
这是val函数的实现
修改最后一句,将
?
??this.value = val;
?
改成
?
???this.value = val|| "";
?
就可以了