Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Баг в IE при попытке установить disabled у кнопки (https://javascript.ru/forum/css-html-internet-explorer/11118-bag-v-ie-pri-popytke-ustanovit-disabled-u-knopki.html)

versus_spb 08.08.2010 14:29

Баг в 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. Прошу не писать, как многие любят: а зачем делать то-то и то-то, кому это нужно. Может кому-то и нужно. Спасибо!

subzey 10.08.2010 15:18

Ну да, есть такая бага в IE.

Забавный был случай, когда под мутулсом в IE внезапно перестало загружаться содержимое в див. Оказалось, у дива был id «description», а в документ был добавлен <meta name="description">.

versus_spb 10.08.2010 16:52

Да, сильно! Спасибо что написали - это тоже ведь может кому-то пригодиться :)

reutovo 14.08.2010 12:47

Через setAttribute/removeAttribute это нельзя сделать? :-?

strike55 17.11.2011 14:12

Цитата:

Сообщение от reutovo (Сообщение 67365)
Через 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/

ksa 17.11.2011 15:34

Цитата:

Сообщение от versus_spb
Долго бился с одной проблемой в 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>

ksa 17.11.2011 15:39

Цитата:

Сообщение от versus_spb (Сообщение 66748)
Вот пример кода, который показывает данный баг. Проверено в 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

Цитата:

Сообщение от ksa
Брехня... Вот работающий у меня в ИЕ8 скрипт.

Вы целиком не прочитали, по-моему. Там дело не столько в баге ie, сколько в неправильной организации кода:
Цитата:

Оказалось, что проблемы была вызвана тем, что помимо submit у меня стоял hidden input с таким же именем (ну другим ID). (только не надо спрашивать, зачем, так было удобно).

UDN 17.11.2011 21:51

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 (Что для вашего кода не так существенно)

Цитата:

Сообщение от trikadin
Цитата:
Оказалось, что проблемы была вызвана тем, что помимо submit у меня стоял hidden input с таким же именем (ну другим ID). (только не надо спрашивать, зачем, так было удобно).

Если и вам так удобней, тогда откажитесь от поддержки IE
microsoft не подстраивает ПО под пользователей, пользователи сами должны подстраиваются под ПО.


Часовой пояс GMT +3, время: 19:39.