Подтвердить что ты не робот

Событие загрузки JQuery on() для одного элемента

Прошу прощения, если этот вопрос уже задан, но я не нашел решения.

У меня есть 3 элемента радио, и я хочу проверить значение, когда выбор изменяется и когда страница загружается.

Я бы сделал это, используя только функцию on().

Моя проблема в том, что инициируется только событие изменения.

Вот мой текущий код:

$('.user').on('load change', function(){
  if($(this).val() == 'client'){ 
$('#user_parent').removeAttr('disabled').closest('tr').show(200);
}else{
  $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
}
});"

Я также попытался заменить нагрузку на готовность, но тоже не удалось. В чем проблема? Не доступно ли событие загрузки для одного элемента?

Код помещается в $(document).ready(...), и все элементы отображаются при отправке страницы.

Спасибо

4b9b3361

Ответ 1

событие load будет называться моментом, когда будут загружены все дочерние элементы прослушанного элемента. в вашем случае это может быть до того, как будет вызвано событие готовности, таким образом, ваш обработчик загрузит (который добавляется после document.ready) бесполезно.

для справки см. JQuery api, где вы найдете следующее:

Событие загрузки отправляется элементу, когда он и все подэлементы были полностью загружены. Это событие может быть отправлено любому элементу, связанному с URL: изображениями, сценариями, фреймами, iframe и объектом window.

это также означает, что вам нужен URL-адрес, поэтому вы можете прослушивать событие загрузки. так как вы не предоставили дополнительный код, я предполагаю, что у вас действительно есть URL-адрес, который вы можете прослушать.

Это может быть наиболее вероятной причиной. если у вас нет связанного с URL с (по крайней мере одним) дочерним элементом (s) не будет никакого события загрузки, которое вы можете прослушать.

попробуйте это вместо:

$(document).ready(function(){
   checkUserVal();
   $('.user').on('change', checkUserVal);
});

var checkUserVal = function(){
  //do the check
  if($('.user').val() == 'client'){ 
     $('#user_parent').removeAttr('disabled').closest('tr').show(200);
  }else{
     $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
  }
};

i сделал код более удобным для чтения способом;)

Ответ 2

Как объяснил Vogel612, load не срабатывает для большинства элементов.

ready предназначен только для document.

Вы можете использовать each для запуска обработчика событий изначально.

$(document).ready(function(){
  $('.user')
    .each(user_handler)
    .on('change', user_handler);
});

var user_handler = function(){
  // this
};