2013-07-01 2 views
10

Прошу прощения, если этот вопрос уже задан, но я не нашел решения.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 (...), и все элементы отображаются при отправке страницы.

Благодаря

+0

@roasted изображение.! – Cherniv

+0

@ Чернов я, а скрипт тоже упс –

+0

@рожден, но 'input' 100% нет – Cherniv

ответ

16

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

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

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

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

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

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

$(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); 
    } 
}; 

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

+1

нет готового увольнения перед загрузкой –

+0

@ спасибо, что исправил меня там. Самое интересное: событие загрузки для элемента, который он слушает, все еще можно вызвать до готовности, см. обновленный ответ. – Vogel612

+0

Дело в том, что вы можете прикреплять обработчик к элементу только тогда, когда элемент готов/доступен в DOM. Я могу подумать о случае, когда вы присоединяете onload событие к изображению/скрипту сразу после этого тега элемента, и этот элемент уже кэширован. В этом случае я думаю, что вы правы, событие onload должно быть запущено до того, как документ будет готов. В любом случае, хороший ввод действительно +1 –

5

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

ready только для document.

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

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

var user_handler = function(){ 
    // this 
}; 
Смежные вопросы