Баг в IE при попытке установить disabled у кнопки
Все привет!
Долго бился с одной проблемой в IE. Наконец её решил и хочу поделиться этим, вдруг кому пригодится, так как нигде не нашёл подобного. Столкнулся с тем, что никак не удавалось устанавливать или убирать disabled у кнопки submit в форме. Никаким способом. Пробовалось следующее: document.getElementById('mod_order_submit').disabled = true; и такое (в связке с MooTools) $('mod_order_submit').set('disabled', true); Это просто взрывало моск, так как в браузерах это работало. Оказалось, что проблемы была вызвана тем, что помимо submit у меня стоял hidden input с таким же именем (ну другим ID). (только не надо спрашивать, зачем, так было удобно). Поменял имя и проблема решилась. Вот пример кода, который показывает данный баг. Проверено в IE 7, 8. <form id="form1" name="form1" method="post" action=""> <input type="button" value="toggle disabled" onclick="document.getElementById('button1').disabled = !document.getElementById('button1').disabled;" /> <input type="submit" name="button1" id="button1" value="Submit" /> </form> <form id="form1" name="form1" method="post" action=""> <input type="button" value="toggle disabled" onclick="document.getElementById('button2').disabled = !document.getElementById('button2').disabled;" /> <input type="hidden" name="button2" id="test_id" /> <input type="submit" name="button2" id="button2" value="Submit" /> </form> Надеюсь, кому-то это будет полезно. p.s. Прошу не писать, как многие любят: а зачем делать то-то и то-то, кому это нужно. Может кому-то и нужно. Спасибо! |
Ну да, есть такая бага в IE.
Забавный был случай, когда под мутулсом в IE внезапно перестало загружаться содержимое в див. Оказалось, у дива был id « description », а в документ был добавлен <meta name="description"> . |
Да, сильно! Спасибо что написали - это тоже ведь может кому-то пригодиться :)
|
Через setAttribute/removeAttribute это нельзя сделать? :-?
|
Цитата:
Имею анкету на php anketa.php <font face="verdana" size="1"> <form action="send.php" method="post"> <p>* Пожалуйста представьтесь:<br> <input type="text" name="name"></p> <p>* Ваш контактный телефон:<br> <input type="text" name="phone"></p> <p>Ваш email:<br> <input type="text" name="email"></p> <p>Марка Вашего автомобиля:<br> <input type="text" name="auto"></p> <p>Год выпуска автомобиля:<br> <input type="text" name="year"></p> <p>Взял(а) масло (выбирите значение) :<br> <select size="1" name="oil" style="border: 1px solid #cccccc; background-color: #ffffff;" size="26"> <option>На розлив</option> <option>В канистре</option> </select><br><br></p> <p>* Название СТО, где проводилась замена масла:<br> <input type="text" name="sto"></p> <p>* Введите данные чека (номер чека, дата и время):<br> <input type="text" name="check"></p> <p>Предложения и пожелания:<br> <textarea name="message" cols="40" rows="5" ></textarea> </p> <p>Введите числа с картинки: <br> <?php $i=1; do { $num[$i] = mt_rand(0,9); echo "<img src='anketa/img/".$num[$i].".gif' border='0' align='bottom' vspace='5px'>"; $i++; } while ($i<5); $captcha = $num[1].$num[2].$num[3].$num[4]; ?> <input name="captcha" type="hidden" value="<?php echo $captcha ;?>"> <input name="pr" style=" margin-bottom:11px" type="text" size="6" maxlength="4"></p> <p><input type="submit" class="bt1" value="Отправить анкету"></p> send.php <?php if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}} if (isset($_POST['phone'])) {$phone = $_POST['phone']; if ($phone == '') {unset($phone);}} if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}} if (isset($_POST['auto'])) {$auto = $_POST['auto']; if ($auto == '') {unset($auto);}} if (isset($_POST['year'])) {$auto = $_POST['year']; if ($year == '') {unset($year);}} if (isset($_POST['oil'])) {$oil = $_POST['oil']; if ($oil == '') {unset($oil);}} if (isset($_POST['sto'])) {$sto = $_POST['sto']; if ($sto == '') {unset($sto);}} if (isset($_POST['check'])) {$check = $_POST['check']; if ($check == '') {unset($check);}} if (isset($_POST['message'])) {$message = $_POST['message']; if ($message == '') {unset($message);}} if (isset($_POST['pr'])){$pr = $_POST['pr']; if ($pr == '') {unset($pr);}} if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];} /* Проверяем заполнены ли все поля */ if (isset($name) && isset($phone) && isset($sto) && isset($check) && isset($pr)) { /* Убираем все лишние пробелы, а также преобразуем все теги HTML в символы*/ $name = htmlspecialchars(trim($name)); $phone = htmlspecialchars(trim($phone)); $email = htmlspecialchars(trim($email)); $auto = htmlspecialchars(trim($auto)); $year = htmlspecialchars(trim($year)); $oil = htmlspecialchars(trim($oil)); $sto = htmlspecialchars(trim($sto)); $check = htmlspecialchars(trim($check)); $message = htmlspecialchars(trim($message)); /* Проверяем правильность ввода email-адреса */ if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { echo "<p>Неверный формат e-mail адреса<br></p>"; } if(!preg_match("/[0-9]/i", $phone)) { echo "<p>Недопустимые символы в номере телефона<br></p>"; } /* Проверяем правильность ввода капчи */ if ($captcha == $pr) { /* Формируем сообщение */ $address = "mail@mail.ru"; $sub = "Анкета с сайта"; $mes = "Автор представился как: $name \nТелефон: $phone \nОставил такой E-mail: $email \nМарка авто: $auto \nГод выпуска авто: $year \nПокупал масло: $oil \nНазвание сто: $sto \nДанные чека: $check \nПредложения и пожелания: \n$message"; /* Отправка сообщения */ $verify = mail ($address,$sub,$mes,"Content-type:text/plain; charset = windows-1251\r\nFrom:$email"); if ($verify == 'true') { echo "Анкета отправлена<br>"; } else { echo "Анкета не отправлена!<br>"; } } else { echo "Вы не правильно ввели сумму чисел с картинки <br>"; } } else { echo "Вы заполнили не все обязательные поля <br>"; } ?> <br> <input type="button" value="Назад" onclick="history.back()"> Как мне сделать, что бы кнопка "назад" при правельном заполнении и отправке анкеты была не активной? Заранее огромное спасибо! |
Нашёл только вот это: http://jquery-docs.ru/attributes/attr/
|
Цитата:
<!DOCTYPE html> <html> <head> <!-- <script src="http://code.jquery.com/jquery-latest.js"></script> <link rel="stylesheet" type="text/css" href="tmp.css" /> --> <style type="text/css"> </style> <script type="text/javascript"> function Go() { document.getElementById('test').disabled=true; } </script> </head> <body> <form> <input type='text' /> <input type='submit' value='Send' id='test' /> <input type='button' value='Disabled Send' onclick='Go()' /> </form> </body> </html> |
Цитата:
|
Цитата:
Цитата:
|
1) IE свойства id и name, нужны для совместимости со старыми версиями, а не для удобства.
т.е. id и name должны быть равны. А для работы с коллекциями есть специальный метод document.body.createControlRange() 2) Ваш код не поддерживает кросс-броузерность 3) Код состоит из одних ошибок document.getElementById('button2') // возвращает первый элемент коллекции input type="hidden" form1.button2.disabled!=form1.button2.disabled // далее наложение визуальных эффектов на скрытый элемент 4) Проверено в IE 7, 8 - В вашем коде нет ни одной строки которая включила бы режим IE7,8. document.documentMode // по умолчанию режим IE5 так что пишите просто в IE (Что для вашего кода не так существенно) Цитата:
microsoft не подстраивает ПО под пользователей, пользователи сами должны подстраиваются под ПО. |
Часовой пояс GMT +3, время: 11:04. |