При использовании нескольких элементов кнопки в форме я понял, что IE7 отправляет innerHTML вместо значения кнопки. Все хорошее, что я подумал, я просто изменю свой PHP-код на этот
<?php if (isset($_POST['button-name'])) { add_product_to_cart(2); } ?>
Теперь мой старый друг IE6 идет немного дальше, будучи неприятностью. Он отправляет все элементы кнопки независимо от того, на какой из них я нажимаю. Например, у меня есть три кнопочных элемента с именем «mint», «near-mint» и «standard». Быстрый print_r($_POST)
сообщает мне, что все 3 имени были отправлены.
Думаю, для исправления этого будет какой-то JavaScript, а не самая элегантная ситуация, но я могу себе представить, что средний пользователь, все еще использующий IE6, недостаточно яркий, чтобы отключить свой JavaScript.
Как я могу это исправить?
Я нашел решение на http://www.codecomments.com/JavaScript/message756646.html
Все кредит автору на этой странице.
По запросу, вот код
function buttonfix(){ var buttons = document.getElementsByTagName('button'); for (var i=0; i<buttons.length; i++) { buttons[i].onclick = function () { for(j=0; j<this.form.elements.length; j++) if( this.form.elements[j].tagName == 'BUTTON' ) this.form.elements[j].disabled = true; this.disabled=false; } } } window.attachEvent("onload", buttonfix);
Это известная ошибка в Internet Explorer.
http://www.dev-archive.net/articles/forms/multiple-submit-buttons.html описывает обходное решение, которое не зависит от JavaScript.
Это сводится к «Использовать <input>
и не создавайте свои кнопки для чего-то, кроме простого текста для своих ярлыков».
Решением является использование <input type="button">
и <input type="submit">
на вашей странице вместо <button type="button">
и <button>
.
Обновление: если вы измените элементы button
элементы input
вы сможете найти их с помощью jQuery со следующим селектором:
var buttons = $('input[type=submit], input[type=button]');