Jquery on()在单个元素上加载事件

FLX*_*FLX 17 jquery events load

如果这个问题已被提出,我很抱歉,但我找不到解决方案.

我有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);
}
});"
Run Code Online (Sandbox Code Playgroud)

我也尝试通过准备替换负载,但它也失败了.有什么问题?单个元素的加载事件不是可用的吗?

代码放在$(document).ready(...)中,并且在发送页面时都会显示元素.

谢谢

Vog*_*612 20

load将在加载侦听元素的所有子元素时调用该事件.在你的情况下,这可能是在调用ready事件之前,因此渲染你的处理程序(在document.ready之后附加)是无用的.

供参考,请参阅JQuery api,您将在其中找到以下内容:

当load和所有子元素已完全加载时,load事件将发送到元素.此事件可以发送到与URL关联的任何元素:图像,脚本,框架,iframe和窗口对象.

这也意味着您需要一个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);
  }
};
Run Code Online (Sandbox Code Playgroud)

我使代码成为提高可读性的方法;)


Vez*_*uex 6

正如Vogel612所解释的那样,load对于大多数元素并不开火.

ready只是为了document.

each最初可以用来运行事件处理程序.

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

var user_handler = function(){
  // this
};
Run Code Online (Sandbox Code Playgroud)