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)

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:45.