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(…)中,并且在发送页面时都会显示元素。
谢谢
在load
侦听元素的所有子元素时,将调用load
事件。 在你的情况下,这可能是在调用ready事件之前,因此使得处理程序加载(在document.ready之后附加)是无用的。
供参考,请参阅JQuery api ,您将在其中找到以下内容:
当load和所有子元素已完全加载时,load事件将发送到元素。 此事件可以发送到与URL关联的任何元素:图像,脚本,框架,iframe和窗口对象。
这也意味着您需要一个URL,因此您可以收听load事件。 因为你没有提供进一步的代码我假设你确实有一个你可以听的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); } };
我使代码成为提高可读性的方法;)
正如Vogel612所解释的那样 ,大多数元素的load
都不会激发。
ready
仅适用于document
。
您最初可以使用each
来运行事件处理程序。
$(document).ready(function(){ $('.user') .each(user_handler) .on('change', user_handler); }); var user_handler = function(){ // this };