Запустить функцию при нажатии и загрузке страницы?

0

У меня есть флажки в ярлыках. Мне нужно, чтобы метка имела класс, когда флажок установлен, но не тогда, когда этого не происходит. Я сделал это с этим:

  $('label').click(function(){
    if ($('input[type=checkbox]', this).is(':checked')) {
     $(this).addClass('checked');
    } else {
      $(this).removeClass('checked');
    }
  });

Однако, когда страница загружается, если флажок установлен, метка не имеет класса, поскольку код еще не запущен.

Id нравится помещать код в функцию и называть его, однако следующее не работает. Оба моих примера кода завернуты в дом.

  function checkFunc(){
    if ($('input[type=checkbox]').is(':checked')) {
      $(this).parent('label').addClass('checked');
    } else {
      $(this).parent('label').removeClass('checked');
    }
  }

  checkFunc();
  $('label').click(checkFunc);

Я получил синтаксическую ошибку или что-то принципиально неправильно с моим кодом?

ОБНОВЛЕНИЕ Ive попробовал следующее:

  function checkFunc(){
    if ($('input[type=checkbox]', this).is(':checked')) { 
      $(this).parent('label').addClass('checked');
    } else {
      $(this).parent('label', this).removeClass('checked');
    }
  }

  $('label').each(checkFunc).click(checkFunc);
  • 1
    Когда вы вызываете функцию с помощью checkFunc() this относится к window , а не к элементу label .
  • 0
    Вы можете передать this в функцию в качестве параметра ^
Теги:

1 ответ

2
Лучший ответ

Когда вы вызываете функцию с помощью checkFunc() тогда [this относится к window ] 1, а не к элементу label.

Похоже, вы хотите запустить функцию для каждого элемента метки, поэтому используйте .each вместо этого:

$('label')
  .each(checkFunc)
  .click(checkFunc);

Но вы также можете просто поднять обработчик события клика после того, как вы связали его, вместо создания именованной функции:

$('label').click(function(){
   // ...
}).triggerHandler('click');
  • 0
    Я пытался реализовать ваш код, см. Мое обновление на мой вопрос.
  • 0
    Ну, вы должны использовать первую реализацию своей функции, а не вторую. $(this).parent('label') неверно, потому что this уже элемент label .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню