Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как сделать input неактивным кроссбраузерно? (https://javascript.ru/forum/events/30010-kak-sdelat-input-neaktivnym-krossbrauzerno.html)

nraw 20.07.2012 18:32

Как сделать input неактивным кроссбраузерно?
 
Здравствуйте. В форме нужно сделать несколько (не все) <input type="text"> неактивными. Сделал так:
if (document.getElementById("tb1").checked) {
document.getElementById("tbnum").disabled = false;
}
else {
document.getElementById("tbnum").disabled = true;
}

Это работает в Opera и FF, а в Chrome и IE нет.

А как сделать, чтобы было кроссбраузерно?

lord2kim 20.07.2012 18:41

nraw, в IE 8 и Chrome 20 все робит...
<html>
<head>
<title></title>
<script>
function a() {
if (document.getElementById("tb1").checked) {
document.getElementById("tbnum").disabled = false;
}
else {
document.getElementById("tbnum").disabled = true;
}
}
</script>
</head>
<body>
<input type="checkbox" value="asd" id="tb1" onClick="a()">
<input type="text" id="tbnum">
</body>
</html>

nraw 20.07.2012 19:04

Наверно, я не полностью сформулировал вопрос. В Chrome и IE сразу после загрузки страницы чекбокс не выделен и поле для текста активно, по крайней мере у меня именно так. Поле <input type="text"> становится неактивным, если поставить, а затем снять галочку.
Может я что-то не так делаю? Подскажите...

Deff 20.07.2012 19:07

nraw,
<script type="text/javascript">
function ONNnclick(){
  if (document.getElementById("tb1").checked) {// alert("A")
document.getElementById("tbnum").disabled=false;
  }
  else {
document.getElementById("tbnum").disabled=true;
  }
}
</script>


<input  id="tb1" type="checkbox"  checked="false" onclick="ONNnclick()" autocomplete="off"/>
<input  id="tbnum" type="text" value="Тра-та-та"/>
<script type="text/javascript">
document.getElementById("tb1").click()
</script>

lord2kim 20.07.2012 19:09

Цитата:

Сообщение от nraw (Сообщение 190333)
Наверно, я не полностью сформулировал вопрос. В Chrome и IE сразу после загрузки страницы чекбокс не выделен и поле для текста активно, по крайней мере у меня именно так. Поле <input type="text"> становится неактивным, если поставить, а затем снять галочку.
Может я что-то не так делаю? Подскажите...

<html>
<head>
<title></title>
<script>
function a() {
if (document.getElementById("tb1").checked) {
document.getElementById("tbnum").disabled = false;
}
else {
document.getElementById("tbnum").disabled = true;
}
}
</script>
</head>
<body>
<input type="checkbox" value="asd" id="tb1" onClick="a()">
<input type="text" id="tbnum">
<script>window.onload = a;</script>
</body>
</html>

либо так (18 строка), либо нарисуйте атрибут disabled у текстового поля изначально...

nraw 20.07.2012 19:41

Спасибо, получилось с атрибутом disabled.

nraw 21.07.2012 12:08

Еще возник вопрос. Если я таким образом пытаюсь включить несколько подряд инпутов, то это не работает. При этом работает, если ставить галки начиная от последнего элемента к первому по порядку. Работает только отдельно какой-либо из выбранных, а остальные неактивны. Как это реализовать?

bes 21.07.2012 12:36

<div>
  <input type="checkbox">
  <input disabled>
  <input disabled>
  <input disabled>
</div>
<div>
  <input type="checkbox">
  <input disabled>
  <input disabled>
  <input disabled>
</div>


<script>
window.onload = function () {//onload begin

  document.body.onclick = function (e) {//onclick begin
    e = e || event;
    var target = e.target || e.srcElement;
 
    if (target.type == 'checkbox') {
      var inp = target.parentNode.children;
      var len = inp.length;
      if (target.checked == true) {
        for (var i = 1; i < len; i++) {
          inp[i].disabled = false;
        }
      } else {
        for (var i = 1; i < len; i++) {
          inp[i].disabled = true;
        }
      }
    }

  }//onclick end

}//onload end
</script>

nraw 21.07.2012 14:02

У меня элементы input находятся в ячейках таблицы
<table>
<tr><td>Название</td><td>Значение</td><td>Количество</td></tr>
<tr>
<td>
<p><input type="checkbox" value="tb1" id="tb1"></p>
</td>
<td>
<p><input type="text" id="tb1val" disabled></p>
</td>
<td>
<p><input type="checkbox" value="num1" id="num1"><input type="text" id="tbnum1" disabled></p>
</td>
</tr>
<tr>
<td>
<p><input type="checkbox" value="tb2" id="tb2"></p>
</td>
<td>
<p><input type="text" id="tb2val" disabled></p>
</td>
<td><p><input type="checkbox" value="num2" id="num1"><input type="text" id="tbnum2" disabled></p>
</td>
</tr>
</table>
поэтому код не работает, а точнее работает частично (только в колонке "Количество"). Если я правильно понял, не работают эти строки?
var inp = target.parentNode.children;
      var len = inp.length;

devote 21.07.2012 14:28

elem.setAttribute('disabled', 'disabled'); // сделать неактивной
elem.removeAttribute('disabled'); // сделать активной
// кроссбраузерно

bes 21.07.2012 16:29

devote,
присвоение disabled true/false тоже вроде кроссбраузерно (у меня везде работает)

nraw, ну у вас разная структура в каждом случае, в первом случае чекбокс в другой ячейке, а во втором - всё в одной ячейке.
Предлагаю сделать всё одинаковой структуры (которая сейчас работает), если же нет, тогда чётко определитесь со структурой и количеством возможных элементов, после этого можно будет смотреть что к чему.

devote 21.07.2012 16:33

Цитата:

Сообщение от bes
присвоение disabled true/false тоже вроде кроссбраузерно (у меня везде работает)

ИЕ с этим делом глючит периодически.

bes 21.07.2012 16:40

Цитата:

Сообщение от devote
ИЕ с этим делом глючит периодически.

То есть так-то работает, но бывают и сбои, спасибо, учту.

nraw 22.07.2012 10:25

Цитата:

Сообщение от bes (Сообщение 190515)
nraw, ну у вас разная структура в каждом случае, в первом случае чекбокс в другой ячейке, а во втором - всё в одной ячейке.
Предлагаю сделать всё одинаковой структуры (которая сейчас работает), если же нет, тогда чётко определитесь со структурой и количеством возможных элементов, после этого можно будет смотреть что к чему.

Да с неактивностью инпутов в таблице разобрался, спасибо всем.

devote 22.07.2012 22:01

<input type="checkbox" value="asd" id="tb2" onclick="a()"/>

bes 22.07.2012 22:42

devote, в чём хитрость? :)

devote 22.07.2012 22:48

Цитата:

Сообщение от bes
devote, в чём хитрость?

ты о чем?

bes 22.07.2012 22:51

Цитата:

Сообщение от devote
ты о чем?

об этом
Цитата:

Сообщение от devote
<input type="checkbox" value="asd" id="tb2" onclick="a()"/>


devote 22.07.2012 22:54

Цитата:

Сообщение от bes
об этом

ну ты просто пропустил пост, тут ТС пост кидал чуть выше моего поста, потом он его решил удалить зачем-то.. Стыдно что ли стало не знаю.

bes 22.07.2012 22:56

Цитата:

Сообщение от devote
ну ты просто пропустил пост, тут ТС пост кидал чуть выше моего поста, потом он его решил удалить зачем-то.. Стыдно что ли стало не знаю.

вопросов нет :)

nraw 23.07.2012 17:42

Цитата:

ну ты просто пропустил пост, тут ТС пост кидал чуть выше моего поста, потом он его решил удалить зачем-то.. Стыдно что ли стало не знаю.
Не захотел просто лишний раз людям морочить голову. Решил свой вопрос сам, думал удалю пост по-быстрому, но не успел до первого ответа. Извините, если не прав.


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