Задать вопрос
palkan_karabov
@palkan_karabov
PressF1

Как сменить checked, кликнув по тому же элементу?

Как при клике на "чекнутый" элемент, отследить, что он уже был "чекнут".
Событие on click срабатывает позже change, и получается, что все "чекнутые".
Пытался, не получается:
<input name="primer" type="radio" value="vasya">
<input name="primer" type="radio" value="petya">
<input name="primer" type="radio" value="fedya">

$('*').on('click', '[name="primer"]', function(){
	if($(this).is(':checked')){
		console.log('double check');
	}	
})
  • Вопрос задан
  • 178 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
RubaXa
@RubaXa
$('*').on('click', '[name="primer"]', ... — ох,
76fca37634e943a6b7a43a5c4689180f.pngUPD $('*').on('...') — выбрать все элементы на странице и повесить на всех событие. При том, вы не просто вешаете событие, а используете делегирование. Если кратко, то делегирование используется, чтобы не вешать один обработчик на Х-элементов, а повесить один на контейнер и фильтровать цель по селектору:

<div class="root">
   <div class="inner">
       <div class="deeper">
          <div class="js-item">item 1</div>
          <div class="js-item">item 2</div>
          <div class="js-item">item 3</div>
       </div>
   </div>
</div>


$('*').on('click', '.js-item', function () {
    console.log('Неправильно');
});

$('.root').on('click', '.js-item', function () {
    console.log('Правильно');
});

$('.js-item:first').click(); // имитируем `click`
/**
Результат:
------
"Неправильно"
"Неправильно"
"Неправильно"
"Правильно"
"Неправильно"
"Неправильно"
 **/


jsbin.com/cosavelala/edit?html,js,console,output
Ответ написан
byte916
@byte916
Обычно не пишут селектор звёздочка, тем более при навешивании событий. Впрочем, его лучше нигде и никогда не использовать (разве что при сбросе стилей браузера, да и то, это спорное решение). Лучше написать $(document).

Касательно решения проблемы, можно попробовать хранить внутреннее состояние где-нибудь в переменной, чтобы ваш код не вызывался снова.
Вот пример
Ответ написан
Комментировать
palkan_karabov
@palkan_karabov Автор вопроса
PressF1
Вопрос почему $(*) , потому что данные подгружаются на ajax, поэтому отслеживать через ready или load не получается.
Ответ написан
@GreatRash
Для начала нафига вам тогда radio вместо checkbox, если вы всё равно хотите поведение чекбокса имитировать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы