Al.*_*Al. 5 javascript jquery internet-explorer internet-explorer-7
问题:在IE 6和7中,使用.val()或.attr('value')而不是按钮的实际值在jQuery中返回按钮元素的文本.这是一个已知问题,它也可以使用.value直接使用Javascript.之前有一个讨论:
但是从未找到可接受的整体解决方案(只有暂时隐藏按钮文本的黑客).
我一直在研究一个完整的解决方案,这样无论何时访问按钮的值(无论是在表单提交还是仅使用jQuery/Javascript),都会返回正确的值.我使用下面的代码与.val()一起工作.我正在寻求帮助,让它也可以使用.attr('value')工作,甚至可以使用直接的Javascript .value.
我已经设置了一个JSfiddle页面,可以在这里看到它:
http://jsfiddle.net/hyperseer/RVyDN/2/
码:
$(document).ready(function(){
$().iefixer();
});
(function($){
$.fn.iefixer = function(){
$.fn.origval = $.fn.val;
$.fn.val = function(value){
var elem = this[0];
if(value === undefined){
var returnVal = null;
if( elem.nodeName.toLowerCase() == 'button' )
{
returnVal = elem.getAttributeNode("value").nodeValue;
} else {
returnVal = $(elem).origval();
}
return returnVal;
} else {
if( elem.nodeName.toLowerCase() == 'button' )
{
elem.getAttributeNode("value").nodeValue = value;
} else {
$(elem).origval(value);
}
}
}
$('button').click( function() {
alert( "$(this).val() = " + $(this).val() ); // this works now with above fix
alert( "$(this).attr('value') = " + $(this).attr('value') ); // doesn't work
alert( "this.value = " + this.value ); // straight JS doesn't work
});
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
更新:
我现在已经使用以下代码将其与 .val() 和 .attr('value') 函数一起使用:
$(document).ready(function(){
$().iefixer();
});
(function($){
$.fn.iefixer = function(){
var ie = $.browser.msie;
var ver = $.browser.version;
if ( ie && ver<=7 ) {
$.fn.origval = $.fn.val;
$.fn.val = function(value){
var elem = this[0];
if(value === undefined){
var returnVal = null;
if( elem.nodeName.toLowerCase() == 'button' )
{
returnVal = elem.getAttributeNode("value").nodeValue;
} else {
returnVal = $(elem).origval();
}
return returnVal;
} else {
if( elem.nodeName.toLowerCase() == 'button' )
{
elem.getAttributeNode("value").nodeValue = value;
} else {
$(elem).origval(value);
}
}
}
var originalAttr = $.fn.attr;
$.fn.attr = function(name, val) {
if (this[0].nodeName.toLowerCase() == 'button' && val === undefined) return $(this).val();
return originalAttr.apply(this, arguments);
}
}
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)