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');
	}	
})
  • Вопрос задан
  • 177 просмотров
Пригласить эксперта
Ответы на вопрос 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, если вы всё равно хотите поведение чекбокса имитировать?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы