Просмотр полной версии : Баг в IE при попытке установить disabled у кнопки
versus_spb
08.08.2010, 14:29
Все привет!
Долго бился с одной проблемой в IE. Наконец её решил и хочу поделиться этим, вдруг кому пригодится, так как нигде не нашёл подобного.
Столкнулся с тем, что никак не удавалось устанавливать или убирать disabled у кнопки submit в форме. Никаким способом.
Пробовалось следующее:
document.getElementById('mod_order_submit').disabl ed = 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">.
versus_spb
10.08.2010, 16:52
Да, сильно! Спасибо что написали - это тоже ведь может кому-то пригодиться :)
Через setAttribute/removeAttribute это нельзя сделать? :-?
strike55
17.11.2011, 14:12
Через 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()">
Как мне сделать, что бы кнопка "назад" при правельном заполнении и отправке анкеты была не активной?
Заранее огромное спасибо!
strike55
17.11.2011, 14:30
Нашёл только вот это: http://jquery-docs.ru/attributes/attr/
Долго бился с одной проблемой в IE.
...
Столкнулся с тем, что никак не удавалось устанавливать или убирать disabled у кнопки submit в форме. Никаким способом.
Брехня... Вот работающий у меня в ИЕ8 скрипт.
<!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>
Вот пример кода, который показывает данный баг. Проверено в 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>
Тупо копирнул код себе в ИЕ8 и там всё работает...
trikadin
17.11.2011, 20:36
Брехня... Вот работающий у меня в ИЕ8 скрипт.
Вы целиком не прочитали, по-моему. Там дело не столько в баге ie, сколько в неправильной организации кода:
Оказалось, что проблемы была вызвана тем, что помимо submit у меня стоял hidden input с таким же именем (ну другим ID). (только не надо спрашивать, зачем, так было удобно).
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 (Что для вашего кода не так существенно)
Цитата:
Оказалось, что проблемы была вызвана тем, что помимо submit у меня стоял hidden input с таким же именем (ну другим ID). (только не надо спрашивать, зачем, так было удобно).
Если и вам так удобней, тогда откажитесь от поддержки IE
microsoft не подстраивает ПО под пользователей, пользователи сами должны подстраиваются под ПО.
Там дело не столько в баге ie, сколько в неправильной организации кода
Именно это я и пытался сказать... :yes:
А то накурочат чёрти чего... А потом вопиют - де браузеры фуфлыжные! :D
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot