Просто пришлось иметь дело с замечательной реализацией IE6 элементов button
. Это решение опирается на Javascript, но некоторые могут найти его полезным.
Это особенно раздражает при использовании AbstractWizardController в среде Spring, поскольку элемент button
является идеальным решением для кнопок «Далее», «Назад» и «Готово» мастера, но не работает в IE6.
Итак, я написал небольшое исправление на основе jQuery (хотя его довольно просто преобразовать, чтобы вам не приходилось использовать библиотеку jQuery).
$(function(){
if((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined)) {
$('button').click( function(event) {
var rx = /\bvalue ?= ?(".*?"|'.*?')/i;
var matches = $(this)[0].outerHTML.match( rx );
if( matches != null )
$(this).attr( 'value', matches[1].substring( 1, matches[1].length - 1 ) );
$('button').not( $(this) ).attr('disabled','disabled');
});
}
});
Это добавит событие onclick ко всем элементам кнопки. Когда кнопка нажата, она будет захватывать внешний HTML кнопки, например ::
<button name="playerId" value="34">Walter Payton</button>
и разобрать атрибут значения. Кажется, для получения значения нужно много усилий, но я обнаружил, что getAttributeNode('value').value
вернул innerHTML, а не указанный атрибут значения, так что это не очень помогло. Затем мы устанавливаем субматч регулярного выражения в качестве значения кнопки. Он должен совпадать, если вы используете двойные или одинарные кавычки в качестве разделителей, но вам нужно использовать некоторую форму разделителя .
Результатом этого является то, что вместо публикации "Уолтер Пэйтон" вместо этого будет фактически опубликовано "34". Недостатком является то, что внешний вид кнопки на странице также изменится на «34» непосредственно перед отправкой формы.
Наконец, скрипт найдет все элементы кнопки, кроме одного, по которому щелкнули, и установит их атрибут disabled
для отключения. Это гарантирует, что они не включены в POST, и вы не получите ложных срабатываний.