Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   убрать checked с radiobutton (https://javascript.ru/forum/events/15857-ubrat-checked-s-radiobutton.html)

agert 16.03.2011 15:47

убрать checked с radiobutton
 
Есть группа radiobutton из 3-х элементов. По умолчанию ни один не выбран. Нужно чтобы после того как будет выбран один из них, можно было отключить checked повторным кликом. Чтобы снова ни один не был выбран.

Matre 16.03.2011 15:57

element.disabled = true;

agert 16.03.2011 16:03

Цитата:

Сообщение от Matre (Сообщение 96878)
element.disabled = true;

А условие какое прописать. Дело в том, что при нажатии сначала убирается checked javascriptom, а потом снова ставится.

ksa 16.03.2011 16:24

Цитата:

Сообщение от agert
Нужно чтобы после того как будет выбран один из них, можно было отключить checked повторным кликом.

Это вроде как будет само собой...

Цитата:

Сообщение от agert
Чтобы снова ни один не был выбран.

Так когда это нужно делать?

Тестовый пример где? Что делал сам?

lalala 16.03.2011 16:29

element.checked = true или false
а по поводу отмены, сделайте кнопку(если такой вариант устроит) и для каждого радиобатона из набора - .checked = false
или я чет перепутал?))

Aetae 16.03.2011 17:44

Фишка в том что checked ставится уже после onclick. Вариантов конечно много, но красивых я не вижу чёт.)

lalala 16.03.2011 19:47

Цитата:

Сообщение от Aetae
Фишка в том что checked ставится уже после onclick. Вариантов конечно много, но красивых я не вижу чёт.)

не знал что он так работает) надо будет запомнить:)

Aetae 16.03.2011 19:57

Тфу ты ё-моё не то хотел сказать. После mouseup.

рони 16.03.2011 21:11

agert,
Вариант ...
<script type="text/javascript">
var a,b;
function foo(c) {
    if (a != c) {b = 0;a = c};
    b ^= 1;
    c.checked = b
};
</script>
<input type="radio" name="r" value="1" onclick="foo(this)"/>
<input type="radio" name="r" value="2" onclick="foo(this)"/>
<input type="radio" name="r" value="3" onclick="foo(this)"/>

agert 17.03.2011 11:44

Цитата:

Сообщение от рони (Сообщение 96912)
agert,
Вариант ...
<script type="text/javascript">
var a,b;
function foo(c) {
    if (a != c) {b = 0;a = c};
    b ^= 1;
    c.checked = b
};
</script>
<input type="radio" name="r" value="1" onclick="foo(this)"/>
<input type="radio" name="r" value="2" onclick="foo(this)"/>
<input type="radio" name="r" value="3" onclick="foo(this)"/>

Спасибо. Всё работает. Но я не понимаю смысл этих строк
if (a != c) {b = 0;a = c};
b ^= 1;
c.checked = b

Больше всего не понимаю зачем b возводить в первую степень.

Matre 17.03.2011 11:55

Цитата:

Спасибо. Всё работает. Но я не понимаю смысл этих строк
if (a != c) {b = 0;a = c};
b ^= 1;
c.checked = b

Больше всего не понимаю зачем b возводить в первую степень.
Это побитовое отрицание, а не степень. Если b равна нулю, то станет единица и наоборот. Полная версия такого кода:

if (b === 0)
	b = 1;
else
	b = 0;


Далее:

Мы проверяем, на какой элемент кликнули в последний раз, а на какой сейчас. Если они совпадают, то меняем checked.

рони 17.03.2011 12:26

agert,
b ^= 1;
это не степень это исключающее или http://javascript.ru/bitwise-operators
способ установления переменной в 1 или true -- затем в 0 или false и т.д.
Алгоритм такой : Если кнопка ранее не нажималась установить переменную b в ноль , в переменной a запомнить какая кнопка нажата .
потом установить значение checked согласно тригеру b.
b ^= 1; или b = b ^ 1;
это можно заменить данном случае на b=!b;

x-yuri 18.03.2011 00:24

вот более простой для понимая вариант
<!DOCTYPE HTML>
<html>
  <head>   
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    <script src="my.js"></script>
  </head>
  <body>

<input type="radio" class="radio" name="group">
<input type="radio" class="radio" name="group">

<script type="text/javascript">
  $('.radio').bind({
    'mouseup': function(){
      $(this).data('prv-checked', this.checked);
    },
    'click': function(){
      this.checked = ! $(this).data('prv-checked');
    }
  });
</script>

  </body>
</html>


а вот вариант рони до минимизации
<!doctype html>
<html>
<body>
    <input type="radio" class="radio" name="group">
    <input type="radio" class="radio" name="group">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    <script type="text/javascript">
        var prvEl, prvChecked;
        $('.radio').click(function(){
            if (prvEl != this) {
                prvChecked = false;
                prvEl = this;
            }
            this.checked = ! prvChecked;
            prvChecked = ! prvChecked;
        });
    </script>
</body>
</html>


а для тех, кого интересует практическая сторона задачи, стоит подумать над вопросом, который задал Артемий Лебедев Сергею Чикуенку: "Как пользователь поймет, что оно так работает?"

Aetae 18.03.2011 00:46

Ну да, для рядового юзера куда проще что-то типа:
<label><input type="radio" name="group" checked>Ничего</label><br>
<label><input type="radio" name="group">Пиво</label><br>
<label><input type="radio" name="group">Водка</label>


И тут уж выбирать надо что важней, дизайн и фишки или колличесьво человек не забивших на заполнение.)

Stolarate 16.08.2013 16:09

А как сделать чтоб рядом выводилось, после выбора, рядом значение "1","2" или "3" в отдельной строке?
Буду очень благодарен!

<label><input type="radio" name="group" checked="checked" />Ничего "1"</label><br /> 
<label><input type="radio" name="group" />Пиво "2"</label><br /> 
<label><input type="radio" name="group" />Водка "3"</label>

рони 17.08.2013 12:32

Stolarate,
:write:
<!DOCTYPE HTML>
<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
 span{
   display: none;
   width: 40px;
   text-align: right;
 }
 label input:checked ~ span {
   display:  inline-block;
 }

  </style>
</head>

<body>

<label><input type="radio" name="group" checked="checked" />Ничего "1"<span>1</span></label><br />


<label><input type="radio" name="group" />Пиво "2"<span>2</span></label><br />


<label><input type="radio" name="group" />Водка "3"<span>3</span></label>

</body>

</html>


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