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 };