Проблема: В IE 6 и 7 текст элемента кнопки возвращается в jQuery с использованием .val () или .attr ('value') вместо фактического значения кнопки. Это известная проблема, которая также возникает с прямым Javascript, использующим .value. Здесь было предыдущее обсуждение:
Получить значение кнопки с помощью jQuery
но приемлемое общее решение не было найдено (только взлом, где текст кнопки временно скрыт).
Я работал над полным решением, чтобы при каждом обращении к значению кнопки (будь то при отправке формы или даже с использованием 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);