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

时间:2013-07-01 08:27:40

标签: 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);
}
});"

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

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

由于

3 个答案:

答案 0 :(得分:18)

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

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

  

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

这也意味着您需要一个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 :(得分:5)

作为Vogel612 explainedload并不会触发大多数元素。

ready仅适用于document

您最初可以使用each来运行事件处理程序。

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

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

答案 2 :(得分:0)

<script>
jQuery( 'document' ).on("load ready", function() {
    $('.user').on('change', function(){
        if($(this).val() == 'client'){ 
            $('#user_parent').removeAttr('disabled').closest('tr').show(200);
        }else{
            $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
        }
    });
    // just do this:
    $('.user').change();
    });
</script>